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 string 扩展库代码
Apr 09 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
May 13 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
Aug 17 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
Dec 30 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
如何利用JavaScript实现二叉搜索树
Apr 02 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中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php中使用sftp教程
2015/03/30 PHP
javascript父、子页面交互技巧总结
2014/08/08 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
js实现购物车功能
2018/06/12 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
Python中的urllib模块使用详解
2015/07/07 Python
详解Python装饰器由浅入深
2016/12/09 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
我爱我校演讲稿
2014/05/21 职场文书
端午节演讲稿
2014/05/23 职场文书
二年级数学教学反思
2016/02/16 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python