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 相关文章推荐
一个JQuery操作Table的代码分享
Mar 30 Javascript
jQuery的层级查找方式分析
Jun 16 Javascript
Bootstrap的class样式小结
Dec 01 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
Mac下安装vue
Apr 11 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
教你使用vue-cli快速构建的小说阅读器
May 13 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
Aug 23 Javascript
react 原生实现头像滚动播放的示例
Apr 21 Javascript
Vue作用域插槽实现方法及作用详解
Jul 08 Javascript
如何通过vscode运行调试javascript代码
Jul 24 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.MVC的模板标签系统(五)
2006/09/05 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
Puppet的一些技巧
2018/09/17 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
Python字符串的一些操作方法总结
2019/06/10 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python如何使用函数做字典的值
2019/11/30 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
天游软件面试
2013/11/23 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
采购部部长岗位职责
2014/02/06 职场文书
小学生秋游活动方案
2014/02/23 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
入党政审材料范文
2014/12/24 职场文书
结婚主持人致辞
2015/07/28 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书