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 相关文章推荐
关于文本限制字数的js代码
Apr 02 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
使用js实现关闭js弹出层的窗口
Feb 10 Javascript
JavaScript数字和字符串转换示例
Mar 26 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
jquery实现左右轮播图效果
Sep 28 jQuery
利用JavaScript的%做隔行换色的实例
Nov 25 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
May 06 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实现图片简单上传
2006/10/09 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
JSONP基础知识详解
2017/03/19 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Python学生成绩管理系统简洁版
2020/04/05 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
想学python 这5本书籍你必看!
2018/12/11 Python
python利用tkinter实现屏保
2019/07/30 Python
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
教师应聘个人求职信
2013/12/10 职场文书
个人对照检查材料
2014/02/12 职场文书
结婚周年感言
2014/02/24 职场文书
服装设计专业自荐信
2014/06/17 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
安全责任书范文
2014/08/25 职场文书
健康状况证明书
2014/11/26 职场文书
奖金申请报告模板
2015/05/15 职场文书
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技