基于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实现输入框动态增减的实例代码
Jul 14 Javascript
JavaScript实现twitter puddles算法实例
Dec 06 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
JavaScript数组常用方法
Mar 02 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
深入学习JavaScript对象
Oct 13 Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 Javascript
js两种拼接字符串的简单方法(必看)
Sep 02 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
js原生Ajax的封装和原理详解
Mar 11 Javascript
js时间查询插件使用详解
Apr 07 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
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连接Oracle for NT 远程数据库
2006/10/09 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
JS中的BOM应用
2018/02/02 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
python xml解析实例详解
2016/11/14 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
python实现多进程通信实例分析
2019/09/01 Python
python创建学生成绩管理系统
2019/11/22 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
Servlet如何得到服务器的信息
2015/12/22 面试题
C++程序员求职信范文
2014/04/14 职场文书
英语系本科生求职信
2014/07/15 职场文书
三年级学生评语大全
2014/12/26 职场文书
2015年采购部工作总结
2015/04/23 职场文书
2015大学迎新标语
2015/07/16 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
Go语言基础知识点介绍
2021/07/04 Golang