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实现的UBB编码函数
Mar 09 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
js局部刷新页面时间具体实现
Jul 04 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
May 17 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
微信小程序实现图片上传、删除和预览功能的方法
Dec 18 Javascript
Less 安装及基本用法
May 05 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
Sep 14 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 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
PHP5 安装方法
2006/10/09 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
python常用函数详解
2016/09/13 Python
一张图带我们入门Python基础教程
2017/02/05 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
python九九乘法表的实例
2017/09/26 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python解析json代码实例解析
2019/11/25 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
网络方面基础面试题
2012/11/16 面试题
家长会主持词开场白
2014/03/18 职场文书
交通事故调解协议书
2014/04/16 职场文书
董事长秘书工作职责
2014/06/10 职场文书
安全责任书模板
2014/07/22 职场文书
房屋所有权证明
2014/10/20 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
护士自荐信范文
2015/03/25 职场文书