JavaScript+HTML5 canvas实现放大镜效果完整示例


Posted in Javascript onMay 15, 2019

本文实例讲述了JavaScript+HTML5 canvas实现放大镜效果。分享给大家供大家参考,具体如下:

效果:

JavaScript+HTML5 canvas实现放大镜效果完整示例

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>3water.com canvas放大镜</title>
  <style>
    #copycanvas {
      border: 1px solid #000;
      display: none;
    }
    #square {
      width: 90px;
      height: 90px;
      background-color: #cc3;
      border: 1px solid #f00;
      opacity: 0.5;
      position: absolute;
      z-index: 999;
      display: none;
      cursor: crosshair;
    }
  </style>
</head>
<body>
<canvas id="canvas" width="450" height="676"></canvas>
<canvas id="copycanvas" width="300" height="300"></canvas>
<div id="square"></div>
<script>
  var canvas = document.getElementById('canvas'), //获取canvas对象
      context = canvas.getContext('2d'), //获取上下文
      copycanvas = document.getElementById('copycanvas'), //获取copycanvas
      copycontext = copycanvas.getContext('2d'),
      square = document.getElementById('square'), //获取透明框
      squaredata = {}, //用来保存选择框数据
      box = canvas.getBoundingClientRect();
  //getBoundingClientRect方法可以获取元素上、下、左、右分别相对浏览器的坐标位置
  //创建图像对象,并加载
  image = new Image();
  image.src = "3.jpg";
  image.onload = function(){
    context.drawImage(image,0,0,canvas.width,canvas.height);
  };
  canvas.onmouseover = function(e){
    var x = e.clientX, //获取鼠标实时坐标
        y = e.clientY;
    createSquare(x,y); //保存透明选择框属性
  };
  window.onmousemove = function(e){
    var x = e.clientX,
        y = e.clientY;
    //判断鼠标是否移出canvas
    if(x >= canvas.offsetLeft && x <= canvas.offsetLeft + canvas.width &&
        y >= canvas.offsetTop && y <= canvas.offsetTop + canvas.height){
      createSquare(x,y);
    }else{
      hideSquare();
      hideCanvas();
    }
  }
  function showSquare(){
    square.style.display = 'block';
  }
  function hideSquare(){
    square.style.display = 'none';
  }
  function showCanvas(){
    copycanvas.style.display = "inline";
  }
  function hideCanvas(){
    copycanvas.style.display = "none";
  }
  function createSquare(x,y){
    //控制选择框不移动出canvas
    x = x - 45 < canvas.offsetLeft ? canvas.offsetLeft:x - 45;
    y = y - 45 < canvas.offsetTop ? canvas.offsetTop:y - 45;
    x = x + 90 < box.right ? x:box.right - 90;
    y = y + 90 < box.bottom ? y:box.bottom - 90;
    squaredata.left = x;
    squaredata.top = y;
    moveSquare(x,y);
  }
  function moveSquare(x,y){
    square.style.left = x + "px";
    square.style.top = y + "px";
    showCanvas();
    showSquare();
    copy();
  }
  function copy(){
    copycontext.drawImage(
        canvas,
        squaredata.left - box.left,
        squaredata.top - box.top,
        90,
        90,
        0,
        0,
        copycanvas.width,
        copycanvas.height
    );
  }
</script>
</body>
</html>

感兴趣的朋友可使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
使用Js让Html中特殊字符不被转义
Nov 05 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
浅谈JavaScript的事件
Feb 27 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
JavaScript自定义分页样式
Jan 17 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
Apr 24 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
详解微信UnionID作用
May 15 #Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 #Javascript
javascript+HTML5 canvas绘制时钟功能示例
May 15 #Javascript
详解小程序用户登录状态检查与更新实例
May 15 #Javascript
基于vue如何发布一个npm包的方法步骤
May 15 #Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 #Javascript
JavaScript页面倒计时功能完整示例
May 15 #Javascript
You might like
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
php生成验证码函数
2015/10/20 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
python 实现list或string按指定分段
2019/12/25 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
学校消防安全制度
2014/01/30 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
员工入职担保书范文
2014/04/01 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
学风建设演讲稿
2014/09/12 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
2016年春节慰问信息
2015/03/25 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python