基于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 相关文章推荐
jQuery学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
javascript 模式设计之工厂模式学习心得
Apr 27 Javascript
jQuery :first选择器使用介绍
Aug 09 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
Dec 10 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
利用PM2部署node.js项目的方法教程
May 10 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 Javascript
js Dom实现换肤效果
Oct 21 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
关于vue的列表图片选中打钩操作
Sep 09 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
jquery easyui使用心得
2014/07/07 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
从零学python系列之从文件读取和保存数据
2014/05/23 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
django框架auth模块用法实例详解
2019/12/10 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
光盘行动倡议书
2014/02/02 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
2015年党日活动总结范文
2015/03/25 职场文书