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 类型转换方法
Oct 24 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
Apr 10 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
js select option对象小结
Dec 20 Javascript
JS实现不规则TAB选项卡效果代码
Sep 16 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
webpack+vue.js快速入门教程
Oct 12 Javascript
vue 项目常用加载器及配置详解
Jan 22 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 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开发工具之vs2005图解
2008/01/12 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
python实现连连看游戏
2020/02/14 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
党员党性分析材料
2014/02/17 职场文书
禁烟标语大全
2014/06/11 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
MySQL表的增删改查(基础)
2021/04/05 MySQL
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server