js canvas实现放大镜查看图片功能


Posted in Javascript onJune 08, 2017

本文实例为大家分享了canvas实现放大镜查看图片功能的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body style="background: black;">
<canvas id="myCanvas" style="display: block;margin: 0px auto;border: 10px solid #aaa ">
  你的浏览器不支持canvas
</canvas>
<canvas id="offCanvas" style="display: none"></canvas>
<script>
  var myCanvas = document.getElementById("myCanvas");
  var context = myCanvas.getContext("2d");

  var offCanvas = document.getElementById("offCanvas");
  var offContext = offCanvas.getContext("2d");

  var isMouseDown = false;
  var scale;

  var image = new Image();

  window.onload = function () {

    myCanvas.width = 300;
    myCanvas.height = 200;

    image.src = "1.jpg";

    image.onload = function () {

      offCanvas.width = image.width;
      offCanvas.height = image.height;
      scale = offCanvas.width / myCanvas.width ;

      context.drawImage(image,0,0,myCanvas.width,myCanvas.height);
      offContext.drawImage(image,0,0);

    }

  };
  function windowToCanvas(x,y) {
    var bbox = myCanvas.getBoundingClientRect();
    return { x : x - bbox.left , y : y - bbox.top};
  }
  myCanvas.onmousedown = function (e) {
    e.preventDefault();
    var point = windowToCanvas(e.clientX , e.clientY);
    console.log(point);
    isMouseDown = true;
    drawCanvasWithMagnifier( true , point );
  };
  myCanvas.onmousemove = function (e) {
    e.preventDefault();
    if (isMouseDown ){
      var point = windowToCanvas(e.clientX , e.clientY);
      drawCanvasWithMagnifier( true , point );
    }
  };
  myCanvas.onmouseup = function (e) {
    e.preventDefault();
    isMouseDown = false;
    drawCanvasWithMagnifier( false );
  };
  myCanvas.onmouseout = function (e) {
    e.preventDefault();
    isMouseDown = false;
    drawCanvasWithMagnifier( false );
  };
  function drawCanvasWithMagnifier( isShowMagnifier , point) {
    context.clearRect(0,0,myCanvas.width,myCanvas.height);
    context.drawImage(image,0,0,myCanvas.width,myCanvas.height);
    if(isShowMagnifier == true ){
      drawMagnifier( point );
    }
  }
  function drawMagnifier( point ) {
    var imageLG_cx = point.x * scale ;
    var imageLG_cy = point.y * scale ;

    var mr = 20 ;

    var sx = imageLG_cx - mr ;
    var sy = imageLG_cy - mr ;

    var dx = point.x - mr ;
    var dy = point.y - mr ;

    context.save();

    context.lineWidth = 5.0;
    context.strokeStyle = "#069";


    context.beginPath();
    context.arc(point.x,point.y,mr,0,Math.PI*2);
    context.stroke();

    context.clip();

    context.drawImage(offCanvas,sx,sy,2*mr,2*mr,dx,dy,2*mr,2*mr);
    context.restore();
  }
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于实现代码语法标亮 dp.SyntaxHighlighter
Feb 02 Javascript
javascript写的一个链表实现代码
Oct 25 Javascript
js简单实现竖向tab选项卡的方法
May 04 Javascript
javascript实现别踩白块儿小游戏程序
Nov 22 Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
BootStrap中
Dec 10 Javascript
jQuery实现的分页功能示例
Jan 22 Javascript
vue-cli监听组件加载完成的方法
Sep 07 Javascript
微信小程序实现的绘制table表格功能示例
Apr 26 Javascript
js抽奖转盘实现方法分析
May 16 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 #Javascript
微信小程序开发之map地图实现教程
Jun 08 #Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 #Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 #Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 #Javascript
javascript实现二叉树遍历的代码
Jun 08 #Javascript
微信小程序tabbar不显示解决办法
Jun 08 #Javascript
You might like
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
js获取页面description的方法
2015/05/21 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
基于复选框demo(分享)
2017/09/27 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python实现多线程的两种方式
2016/05/22 Python
Python的标准模块包json详解
2017/03/13 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
Linux的文件类型
2012/03/07 面试题
银行会计业务的个人自我评价
2013/11/02 职场文书
网络技术专业求职信
2014/05/02 职场文书
2014年评职称工作总结
2014/11/20 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server