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 相关文章推荐
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
javascript动态获取登录时间和在线时长
Feb 25 Javascript
全面介绍javascript实用技巧及单竖杠
Jul 18 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
Aug 16 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
Jan 21 Javascript
vue拦截器Vue.http.interceptors.push使用详解
Apr 22 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
Sep 20 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 Javascript
node运行js获得输出的三种方式示例详解
Jul 02 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
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
php header Content-Type类型小结
2011/07/03 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
重命名批处理python脚本
2013/04/05 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python正则表达式完全指南
2017/05/25 Python
Python中常用信号signal类型实例
2018/01/25 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
电子商务专员岗位职责
2013/12/11 职场文书
师恩难忘教学反思
2014/04/27 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
开除员工通知
2015/04/22 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python