<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>鼠标事件</title>
</head>
<body>
<canvas id="canvas"></canvas>
<canvas id="offCanvas" style=" display: none;"></canvas>
<script>
 var canvas=document.getElementById('canvas')
 var context=canvas.getContext('2d')
 var offcanvas=document.getElementById('offCanvas')
 var offcontext=offcanvas.getContext('2d') 
 var image=new Image()
 //鼠标左键是否被点击
 var isMouseDown=false;
 //定义缩放值
 var scale 
 window.οnlοad=function(){
  canvas.width="1030";
  canvas.height='750';
  image.src="timg.jpg"
  //图片的原始尺寸要大于canvas的尺寸
  image.οnlοad=function(){
  offcanvas.width=image.width;
  offcanvas.height=image.height
  scale=offcanvas.width/canvas.width;  
  context.drawImage(image,0,0,canvas.width,canvas.height);
  offcontext.drawImage(image,0,0)
  }
  //将屏幕的坐标转换为在canvas的坐标
  function windowToCanvas(x,y){
  //获取canvas距离浏览器周围的left和top值
  var bbox=canvas.getBoundingClientRect();
 
  return {x:x-bbox.left,y:y-bbox.top}   
  } 
  //鼠标按下
  canvas.οnmοusedοwn=function(e){
  e.preventDefault(e);
  var point=windowToCanvas(e.clientX,e.clientY);
  //console.log('point.left'+point.x+','+e.clientX+','+e.clientY)
      isMouseDown=true
      //绘制放大镜 当onmouseup、onmouseout时 drawcanvasWithMagnifier传入false
      drawcanvasWithMagnifier(true,point)            
  }
  //鼠标移动
  canvas.οnmοusemοve=function(e){
  e.preventDefault(e);
  //需要查看鼠标的左键是否点击着 如果没有点击则释放放大镜效果
  //isMouseDown为true时显示放大镜
  if(isMouseDown){
  var point=windowToCanvas(e.clientX,e.clientY);
  //console.log('point.left'+point.x+','+e.clientX+','+e.clientY)
  drawcanvasWithMagnifier(true,point)
  }
  }
  //鼠标松开
  canvas.οnmοuseup=function(e){
  e.preventDefault(e);
  isMouseDown=false;
  drawcanvasWithMagnifier(false)
  }
  //鼠标移开
  canvas.οnmοuseοut=function(e){
  e.preventDefault(e);
  isMouseDown=false;
  drawcanvasWithMagnifier(false)
  }
  function drawcanvasWithMagnifier(isMouseDown,point){
  context.clearRect(0,0,canvas.width,canvas.height)
  context.drawImage(image,0,0,canvas.width,canvas.height);
  if(isMouseDown){
  //绘制放大镜】
  drawMagnifier(point)
  }
  }
  function drawMagnifier(point){
  //console.log('point.x'+point.x+'point.y'+point.y);
  //鼠标点击的位置 计算出在放大图像中的位置  计算出大图的中心坐标
  var imageLG_cx=point.x*scale
  var imageLg_cy=point.y*scale
  //放大镜显示的大小 设置为200 放大镜的半径为200
  var mr=200
  //计算圆形的坐标和宽高
  var sx=imageLG_cx-mr;
  var sy=imageLg_cy-mr;
  //用户可见的位置
  var dx=point.x-mr;
  var dy=point.y-mr;
  context.save()
  context.lineWidth=10.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>

转:canvas--放大镜效果相关推荐

  1. 练手小项目——canvas放大镜效果 放大图片

    参考:canvas之放大镜效果_WHTGS的博客-CSDN博客_canvas 放大镜 效果: 代码: <!DOCTYPE html> <html lang="en" ...

  2. html中放大镜案列,Canvas实现放大镜效果完整案例分析(附代码)

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的api.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...

  3. canvas整体放大_【HTML5】Canvas 实现放大镜效果

    图片放大镜 效果 原理 首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上,保证两块区域的中心点一致, 如下图所示: 初始化 获得 canvas 和 image 对象,这里使用 标签 ...

  4. Canvas实现放大镜效果

    引言:大家都在淘宝上买过东西吧,应该都知道鼠标放到照片上时会将图片放大,这就是接下来要写的放大镜效果. 主要思路:其实很简单就是用drawImage这个方法来操作的,两个画布一个将原图绘制上去,另一个 ...

  5. html放大镜原理,Canvas实现放大镜效果完整案例分析(附代码)

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...

  6. html5 放大镜效果,JavaScript+HTML5 canvas实现放大镜效果完整示例

    本文实例讲述了JavaScript+HTML5 canvas实现放大镜效果.分享给大家供大家参考,具体如下: 效果: www.jb51.net canvas放大镜 #copycanvas { bord ...

  7. canvas之放大镜效果

    利用canvas来实现放大镜效果很简单,而且效果相对于传统的js实现,更加流畅,体验效果更好.下面来具体实现一下(主要利用了canvas处理图片的相关方法): 1.整体的页面布局: 两个画布,一个存放 ...

  8. android 放大镜动画,Android在图片上进行放大镜效果(放大镜形状)

    Android 图片上放大镜效果实现 1.[文件] ZoomView.java ~ 5KB     下载(55) package com.study.hello; import android.con ...

  9. js实现图片放大镜效果

    效果图 代码实现过程 html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  10. canvas-实现放大镜效果

    canvas-实现放大镜效果 目录 文章目录 前言 推荐阅读 代码展示 结果展示 前言 本文为canvas实现放大镜 逻辑简单,适合作为基础项目练手 推荐阅读 <H5 canvas核心技术> ...

最新文章

  1. vCenter Server Appliance 6.5 中重置丢失或忘记的 root 密码
  2. Python中scrapy下载保存图片
  3. getReadableDatabase与getWritableDatabase的区别
  4. python leetcode 爬楼梯问题 斐波那契数列
  5. 阅读器xodo_佐道Xodo——手机最佳pdf阅读器
  6. php上个月的最后一天,在PHP中查找上个月的最后一天
  7. php7 pdo mysql_PHP7添加pdo_mysql扩展
  8. 比真机还快的Android模拟器——Genymotion
  9. HikariDataSource 监控_Prometheus监控告警浅析
  10. 关于power shell
  11. Python 爬虫 —— scrapy
  12. HOOK API(三)—— HOOK 所有程序的 MessageBox
  13. CMU Bomblab 答案
  14. php 打印debug日志
  15. 通向架构师的道路(第三天)之apache性能调优 (转)
  16. mybatis开启日志打印
  17. excel计算机一级打不开,电脑上的所有excel表格都打不开怎么处理?
  18. Principal Components Analysis
  19. 【洛谷】月赛:Tomoya loves Nagisa-DP找规律
  20. 戴尔服务器r510装系统,戴尔R510服务器网卡驱动安装步骤.doc

热门文章

  1. 洛谷 P1816 忠诚 ST函数
  2. Tornado帮助文档组织(zt)
  3. 遭遇一次MySQL猜解注入攻击
  4. 机器学习实战(六)——支持向量机
  5. 发布md 的文章测试
  6. 自绘列表框控件显示略缩图----再稍微改进点点。。
  7. 无法复制winevt中的文件_u盘文件无法复制怎么解决 u盘文件无法复制解决方法【详细步骤】...
  8. tcp 和 dcp 的几大区别
  9. 李宏毅机器学习课程1~~~Introduction Regression
  10. ubuntu 15.04 /var/log/下各个日志文件及修复无message文件和debug文件