基于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 应用 JQuery.groupTable.js
Dec 15 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
Jun 13 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
微信小程序顶部可滚动导航效果
Oct 31 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 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 新手入门教程
2009/08/03 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
一起深入理解js中的事件对象
2021/02/06 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python使用turtule画五角星的方法
2015/07/09 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
python调用c++传递数组的实例
2019/02/13 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python有参函数使用代码实例
2020/01/06 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
《少年王勃》教学反思
2014/04/27 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
民间借贷协议书范本
2014/10/01 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年班组长工作总结
2014/11/20 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
荒岛余生观后感
2015/06/09 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书