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 事件属性绑定带参数的函数
Mar 13 Javascript
Javascript 去除数组的重复元素
May 04 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
jQuery实现新消息闪烁标题提示的方法
Mar 11 Javascript
jquery实现一个简单的表单验证实例
Mar 30 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
Jul 01 Javascript
JavaScript中this的四个绑定规则总结
Sep 26 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
Jun 21 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 Javascript
Vue中正确使用Element-UI组件的方法实例
Oct 13 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php的常量和变量实例详解
2017/06/27 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
js继承实现方法详解
2016/12/16 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
python中实现字符串翻转的方法
2018/07/11 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
Python API len函数操作过程解析
2020/03/05 Python
iPython pylab模式启动方式
2020/04/24 Python
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
干部作风建设工作总结
2014/10/29 职场文书
个人租房协议书
2014/11/28 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL