JavaScript+HTML5 canvas实现放大镜效果完整示例


Posted in Javascript onMay 15, 2019

本文实例讲述了JavaScript+HTML5 canvas实现放大镜效果。分享给大家供大家参考,具体如下:

效果:

JavaScript+HTML5 canvas实现放大镜效果完整示例

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>3water.com canvas放大镜</title>
  <style>
    #copycanvas {
      border: 1px solid #000;
      display: none;
    }
    #square {
      width: 90px;
      height: 90px;
      background-color: #cc3;
      border: 1px solid #f00;
      opacity: 0.5;
      position: absolute;
      z-index: 999;
      display: none;
      cursor: crosshair;
    }
  </style>
</head>
<body>
<canvas id="canvas" width="450" height="676"></canvas>
<canvas id="copycanvas" width="300" height="300"></canvas>
<div id="square"></div>
<script>
  var canvas = document.getElementById('canvas'), //获取canvas对象
      context = canvas.getContext('2d'), //获取上下文
      copycanvas = document.getElementById('copycanvas'), //获取copycanvas
      copycontext = copycanvas.getContext('2d'),
      square = document.getElementById('square'), //获取透明框
      squaredata = {}, //用来保存选择框数据
      box = canvas.getBoundingClientRect();
  //getBoundingClientRect方法可以获取元素上、下、左、右分别相对浏览器的坐标位置
  //创建图像对象,并加载
  image = new Image();
  image.src = "3.jpg";
  image.onload = function(){
    context.drawImage(image,0,0,canvas.width,canvas.height);
  };
  canvas.onmouseover = function(e){
    var x = e.clientX, //获取鼠标实时坐标
        y = e.clientY;
    createSquare(x,y); //保存透明选择框属性
  };
  window.onmousemove = function(e){
    var x = e.clientX,
        y = e.clientY;
    //判断鼠标是否移出canvas
    if(x >= canvas.offsetLeft && x <= canvas.offsetLeft + canvas.width &&
        y >= canvas.offsetTop && y <= canvas.offsetTop + canvas.height){
      createSquare(x,y);
    }else{
      hideSquare();
      hideCanvas();
    }
  }
  function showSquare(){
    square.style.display = 'block';
  }
  function hideSquare(){
    square.style.display = 'none';
  }
  function showCanvas(){
    copycanvas.style.display = "inline";
  }
  function hideCanvas(){
    copycanvas.style.display = "none";
  }
  function createSquare(x,y){
    //控制选择框不移动出canvas
    x = x - 45 < canvas.offsetLeft ? canvas.offsetLeft:x - 45;
    y = y - 45 < canvas.offsetTop ? canvas.offsetTop:y - 45;
    x = x + 90 < box.right ? x:box.right - 90;
    y = y + 90 < box.bottom ? y:box.bottom - 90;
    squaredata.left = x;
    squaredata.top = y;
    moveSquare(x,y);
  }
  function moveSquare(x,y){
    square.style.left = x + "px";
    square.style.top = y + "px";
    showCanvas();
    showSquare();
    copy();
  }
  function copy(){
    copycontext.drawImage(
        canvas,
        squaredata.left - box.left,
        squaredata.top - box.top,
        90,
        90,
        0,
        0,
        copycanvas.width,
        copycanvas.height
    );
  }
</script>
</body>
</html>

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript中的对象序列化介绍
Dec 30 Javascript
JavaScript框架是什么?怎样才能叫做框架?
Jul 01 Javascript
JS动态日期时间的获取方法
Sep 28 Javascript
jquery验证手机号是否正确实例讲解
Nov 17 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
javascript数组去重常用方法实例分析
Apr 11 Javascript
angular4模块中给标签添加背景图的实现方法
Sep 15 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 Javascript
详解微信UnionID作用
May 15 #Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 #Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 #Javascript
详解小程序用户登录状态检查与更新实例
May 15 #Javascript
基于vue如何发布一个npm包的方法步骤
May 15 #Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 #Javascript
JavaScript页面倒计时功能完整示例
May 15 #Javascript
You might like
php 禁止页面缓存输出
2009/01/07 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
jquery ajax请求实例深入解析
2012/11/26 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python 拼接文件路径的方法
2018/10/23 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
python matplotlib库的基本使用
2020/09/23 Python
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
尽职尽责村干部自我鉴定
2014/01/23 职场文书
周年庆促销方案
2014/03/15 职场文书
元旦晚会主持词
2014/03/24 职场文书
核心价值观演讲稿
2014/05/13 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
学习张林森心得体会
2014/09/10 职场文书
元旦晚会开场白
2015/05/29 职场文书
环境卫生标语
2015/08/03 职场文书
导游词之岳阳楼
2019/09/25 职场文书
mysql脏页是什么
2021/07/26 MySQL
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS