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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
jquery实现带二级菜单的导航示例
Apr 28 Javascript
javascript实现2048游戏示例
May 04 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
js时间戳与日期格式之间相互转换
Dec 11 Javascript
node vue项目开发之前后端分离实战记录
Dec 13 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
Apr 05 Javascript
js实现3D粒子酷炫动态旋转特效
Sep 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
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
浅说js变量
2011/05/25 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
实例讲解vue源码架构
2019/01/24 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python3.7.0的安装步骤
2018/08/27 Python
python绘制动态曲线教程
2020/02/24 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python如何进行时间处理
2020/08/06 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
百度JavaScript笔试题
2015/01/15 面试题
半年思想汇报
2013/12/30 职场文书
公司经理聘任书
2014/03/29 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书