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下利用arguments实现string.format函数
Aug 24 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
Jan 21 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
jQuery获取动态生成的元素示例
Jun 15 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
js实现加载更多功能实例
Oct 27 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
a标签置灰不可点击的实现方法
Feb 06 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
Sep 13 Javascript
layui按条件隐藏表格列的实例
Sep 19 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文件压缩之PHPZip类用法实例
2015/06/18 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
Stop SQL Server
2007/06/21 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python抓取网页内容示例分享
2014/02/24 Python
numpy返回array中元素的index方法
2018/06/27 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
python 实现两个线程交替执行
2020/05/02 Python
python的setattr函数实例用法
2020/12/16 Python
python实现马丁策略的实例详解
2021/01/15 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
linux面试题参考答案(9)
2016/01/29 面试题
消防宣传口号
2014/06/16 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL