基于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 相关文章推荐
Dom与浏览器兼容性说明
Oct 25 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
Javascript中this的用法详解
Sep 22 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
Mar 18 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
vue.js学习之递归组件
Dec 13 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
JavaScript Event Loop相关原理解析
Jun 10 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
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JavaScript 模拟用户单击事件
2009/12/31 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python程序变成软件的实操方法
2019/06/24 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
电子专业毕业生自我鉴定
2014/01/22 职场文书
电子银行营销方案
2014/02/22 职场文书
安全协议书
2014/04/23 职场文书
预备党员考察意见范文
2015/06/01 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
Python时间操作之pytz模块使用详解
2022/06/14 Python