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 相关文章推荐
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
javascript开发中因空格引发的错误
Nov 08 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
jQuery实现简单下拉导航效果
Sep 07 Javascript
jQuery中的基本选择器用法学习教程
Apr 14 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
详解Node全局变量global模块
Sep 28 Javascript
NW.js 简介与使用方法
Feb 01 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
在Vue 中获取下拉框的文本及选项值操作
Aug 13 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
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
javascript实现下雨效果
2017/03/27 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
用vue写一个日历
2020/11/02 Javascript
Python3搜索及替换文件中文本的方法
2015/05/22 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python 读取数据库并绘图的实例
2019/12/03 Python
如何基于python实现归一化处理
2020/01/20 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
Python对象的属性访问过程详解
2020/03/05 Python
python中最小二乘法详细讲解
2021/02/19 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
装修协议书范本
2014/04/21 职场文书
市场督导岗位职责
2015/04/10 职场文书
学校团代会开幕词
2016/03/04 职场文书
亲情作文之母爱
2019/09/25 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS