基于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 相关文章推荐
alert和confirm功能介绍
May 21 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
使用jspdf生成pdf报表
Jul 03 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
Nov 01 Javascript
Javascript中常用类型的格式化方法小结
Dec 26 Javascript
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
js实现文章目录索引导航(table of content)
May 10 Javascript
原生JavaScript实现刮刮乐
Sep 29 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大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python中的作用域规则详解
2015/01/30 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python 实现简单的客户端认证
2020/07/29 Python
python打包生成so文件的实现
2020/10/30 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
酒吧员工的岗位职责
2013/11/26 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
公务员考察材料
2014/12/23 职场文书
校运会新闻稿
2015/07/17 职场文书
财务管理制度范本
2015/08/04 职场文书
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL