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 相关文章推荐
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
juqery 学习之三 选择器 简单 内容
Nov 25 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
jquery自定义下拉列表示例
Apr 25 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
js中匿名函数的创建与调用方法分析
Dec 19 Javascript
js实现微信分享代码
Oct 11 Javascript
javascript创建含数字字母的随机字符串方法总结
Aug 01 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
基于node简单实现RSA加解密的方法步骤
Mar 21 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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
php session 检测和注销
2009/03/16 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
JavaScript代码复用模式实例分析
2012/12/02 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
Python实现的彩票机选器实例
2015/06/17 Python
django反向解析和正向解析的方式
2018/06/05 Python
python3实现windows下同名进程监控
2018/06/21 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
Django缓存Cache使用详解
2020/11/30 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
毕业生文员求职信
2013/11/03 职场文书
捐赠仪式主持词
2014/03/19 职场文书
施工安全承诺书
2014/05/22 职场文书
校园安全标语
2014/06/07 职场文书
党员三严三实心得体会
2014/10/13 职场文书
黄石寨导游词
2015/02/05 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
用python开发一款操作MySQL的小工具
2021/05/12 Python
总结Python使用过程中的bug
2021/06/18 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python