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 相关文章推荐
一个网马的tips实现分析
Nov 28 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
跟我学习javascript的隐式强制转换
Nov 16 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
详解Vue-Cli 异步加载数据的一些注意点
Aug 12 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
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文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP生成随机密码类分享
2014/06/25 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
详解vue-router基本使用
2017/04/18 Javascript
js中this对象用法分析
2018/01/05 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
TensorFlow变量管理详解
2018/03/10 Python
通过Pandas读取大文件的实例
2018/06/07 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
学生会竞选自荐信
2013/10/12 职场文书
个人自我剖析材料
2014/02/07 职场文书
入党综合考察材料
2014/06/02 职场文书
司法助理专业自荐书
2014/06/13 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
鸡毛信观后感
2015/06/11 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL