基于javascript实现放大镜特效


Posted in Javascript onDecember 03, 2020

本文实例为大家分享了javascript实现放大镜特效的具体代码,供大家参考,具体内容如下

我们在逛pc端商城时,鼠标放到商品上经常会看到一个类似放大镜效果的蒙层,

<!DOCTYPE html>
<html>

<head>
 <meta charset="UTF-8">
 <title></title>
 <style type="text/css">
  * {
   margin: 0px;
   padding: 0px;
  }
  
  #min {
   width: 350px;
   height: 350px;
   border: 1px solid #ccc;
   position: absolute;
   left: 50px;
   top: 50px;
  }
  
  #min img {
   width: 350px;
   height: 350px;
  }
  
  #max {
   width: 500px;
   height: 500px;
   position: absolute;
   left: 500px;
   top: 50px;
   border: 1px solid #ccc;
   overflow: hidden;
   display: none;
  }
  
  #max img {
   position: absolute;
   left: 0;
   top: 0;
  }
  
  #mask {
   width: 200px;
   height: 200px;
   background: rgba(255, 0, 0, 0.5);
   position: absolute;
   left: 0px;
   top: 0px;
   cursor: pointer;
   display: none;
  }
 </style>
</head>

<body>
 <div id="min">
  <img src="img/min.jpg" alt="" />
  <div id="mask"></div>
 </div>
 <div id="max">
  <img src="img/max.jpg" id="maxImg" />
 </div>
 <script type="text/javascript">
  // 1.鼠标经过小盒子,遮罩层出现,大盒子出现
  // 2.遮罩层跟随鼠标移动
  // 3.遮罩层移动,大盒子里的图片反方向移动
  var oMin = document.getElementById('min');
  var oMax = document.getElementById('max');
  var oMask = document.getElementById('mask');
  var oMaxImg = document.getElementById('maxImg');
  oMin.onmousemove = function(e) {
   // 1.鼠标经过小盒子,遮罩层和大盒子出现
   oMask.style.display = 'block';
   oMax.style.display = 'block';
   // 2.拿到鼠标在小盒子上的坐标
   var minX = e.clientX - oMin.offsetLeft;
   var minY = e.clientY - oMin.offsetTop;
   // 3.将鼠标放置在遮罩层的中间
   minX = minX - oMask.offsetWidth / 2;
   minY = minY - oMask.offsetHeight / 2;
   // 4.遮罩层可以移动的最大距离
   var maxWidth = oMin.offsetWidth - oMask.offsetWidth;
   var maxHeight = oMin.offsetHeight - oMask.offsetHeight;
   // 限定遮罩层的位置
   if (minX > maxWidth) {
    minX = maxWidth;
   } else if (minX <= 0) {
    minX = 0;
   }
   if (minY > maxHeight) {
    minY = maxHeight;
   } else if (minY <= 0) {
    minY = 0;
   }
   // 设定遮罩层的偏移
   oMask.style.left = minX + 'px';
   oMask.style.top = minY + 'px';
   // 大图片移动的距离=遮罩层移动的距离/遮罩层可以移动的最大距离*大图片最大移动距离
   var ratioX = minX / maxWidth;
   var ratioY = minY / maxHeight;
   // 计算出大图片的移动距离
   oMaxImg.style.left = -ratioX * (oMaxImg.offsetWidth - oMax.offsetWidth) + 'px';
   oMaxImg.style.top = -ratioY * (oMaxImg.offsetHeight - oMax.offsetHeight) + 'px';
  };
  // 鼠标移开,遮罩层和大盒子消失
  oMin.onmouseout = function() {
   oMask.style.display = 'none';
   oMax.style.display = 'none';
  }
 </script>
</body>

</html>

效果图:

基于javascript实现放大镜特效

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
jquery $.each() 使用小探
Aug 23 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
js精确的加减乘除实例
Nov 14 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
Sep 04 Javascript
javascript实现时钟动画
Dec 03 #Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 #Javascript
JS如何实现在弹出窗口中加载页面
Dec 03 #Javascript
对vue生命周期的深入理解
Dec 03 #Vue.js
在实例中重学JavaScript事件循环
Dec 03 #Javascript
js 数据类型判断的方法
Dec 03 #Javascript
用vue设计一个日历表
Dec 03 #Vue.js
You might like
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
python使用Tesseract库识别验证
2018/03/21 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Django 用户认证组件使用详解
2019/07/23 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
横幅标语大全
2014/06/17 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Python OpenCV形态学运算示例详解
2022/04/07 Python