基于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 相关文章推荐
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
javascript不同页面传值的改进版
Sep 30 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
ExtJS Window 最小化的一种方法
Nov 18 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
jquery使用each方法遍历json格式数据实例
May 18 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
Sep 20 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
angularJs利用$scope处理升降序的方法
Oct 08 Javascript
关于JS中的作用域中的问题思考分享
Apr 06 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
数据库查询记录php 多行多列显示
2009/08/15 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python决策树分类算法学习
2017/12/22 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
建筑工程技术应届生自荐信
2013/09/27 职场文书
同学聚会主持词
2014/03/18 职场文书