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 相关文章推荐
JS简单的轮播的图片滚动实例
Jun 17 Javascript
javascript中call和apply方法浅谈
Sep 27 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
AngularJs html compiler详解及示例代码
Sep 01 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
基于JavaScript实现带缩略图的轮播效果
Jan 12 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
JS实现图片手风琴效果
Apr 17 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
vue左侧菜单,树形图递归实现代码
Aug 24 Javascript
vue-cli3跨域配置的简单方法
Sep 06 Javascript
浅谈js数组splice删除某个元素爬坑
Oct 14 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网站基础优化方法小结
2008/09/29 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
Python代码的打包与发布详解
2014/07/30 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
Python datetime 如何处理时区信息
2020/09/02 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
一个大学生十年的职业规划
2014/01/17 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
装饰活动策划方案
2014/02/11 职场文书
优秀党支部申报材料
2014/12/24 职场文书
关于召开会议的通知
2015/04/15 职场文书
学生退学证明
2015/06/23 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python