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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
jQuery实现ToolTip元素定位显示功能示例
Nov 23 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
Mar 13 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
详解webpack与SPA实践之开发环境搭建
Dec 18 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
详解如何在Vue项目中发送jsonp请求
Oct 25 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 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/01/05 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php类的定义与继承用法实例
2015/07/07 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
利用JS实现数字增长
2016/07/28 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
python后端接收前端回传的文件方法
2019/01/02 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
财务会计专业推荐信
2013/11/30 职场文书
考试不及格的检讨书
2014/01/22 职场文书
物业保安岗位职责
2014/07/02 职场文书
办理房产证委托书
2014/09/18 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书