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 操作select下拉列表框的一点小经验
Mar 20 Javascript
JavaScript 高级篇之函数 (四)
Apr 07 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
js style动态设置table高度
Oct 21 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
如何屏蔽防止别的网站嵌入框架代码
Aug 24 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
javascript的列表切换【实现代码】
May 03 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 Javascript
vue.js简单配置axios的方法详解
Dec 13 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 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简单封装了一些常用JS操作
2007/02/25 PHP
php Undefined index的问题
2009/06/01 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
javascript数据类型详解
2017/02/07 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
python 图像增强算法实现详解
2021/01/24 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
车间工艺员岗位职责
2013/12/09 职场文书
关于赌博的检讨书
2014/01/24 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
工作时间证明
2015/06/15 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python