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 相关文章推荐
prototype 学习笔记整理
Jul 17 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
Apr 11 Javascript
JavaScript使用cookie记录临时访客信息的方法
Apr 07 Javascript
jquery.validate使用时遇到的问题
May 25 Javascript
JS实现灵巧的下拉导航效果代码
Aug 25 Javascript
JavaScript学习总结之JS、AJAX应用
Jan 29 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
JS实现简易留言板增删功能
Feb 08 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
vue addRoutes路由动态加载操作
Aug 04 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与已存在的Java应用程序集成
2006/10/09 PHP
第九节--绑定
2006/11/16 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
Python脚本处理空格的方法
2016/08/08 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
pandas的排序和排名的具体使用
2019/07/31 Python
基于python操作ES实例详解
2019/11/16 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
error和exception有什么区别
2012/10/02 面试题
护士演讲稿范文
2014/01/05 职场文书
有关打架的检讨书
2014/01/25 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
法人授权委托书范本
2014/09/17 职场文书
2014年档案室工作总结
2014/12/01 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
MySQL 条件查询的常用操作
2022/04/28 MySQL