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 Array对象基础知识小结
Nov 16 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
Oct 31 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
Feb 19 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
Vue中使用Sortable的示例代码
Apr 07 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 Javascript
js验证身份证号码记录的方法
Apr 26 Javascript
jQuery HTML设置内容和属性操作实例分析
May 20 jQuery
详解微信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 adodb连接mssql解决乱码问题
2009/06/12 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
深入理解PHP中的count函数
2016/05/31 PHP
laravel学习教程之关联模型
2016/07/30 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
用Python写一个for循环的例子
2016/07/19 面试题
医药工作者的求职信范文
2013/09/21 职场文书
资深生产主管自我评价
2013/09/22 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
小学课外阅读总结
2014/07/09 职场文书
工资证明范本
2015/06/12 职场文书
教师外出学习心得体会
2016/01/18 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
JAVA springCloud项目搭建流程
2022/05/11 Java/Android