javascript实现电商放大镜效果


Posted in Javascript onNovember 23, 2020

本文实例为大家分享了javascript实现电商放大镜效果的具体代码,供大家参考,具体内容如下

学习内容:

1、event.pageX 属性返回鼠标指针的位置,相对于文档的左边缘。
2、clientX 事件属性返回当事件被触发时鼠标指针相对于浏览器页面(或客户区)的水平坐标。
3、onmouseenter鼠标移入
4、onmouseleave鼠标移出

案例完整代码。html+css3+javascript

案例需求:鼠标点击左边图片时(鼠标呈十字架),遮罩层显示,右边盒子显示。且鼠标移动中心在遮罩层中心,右边大盒子显示鼠标点到的地方,以800:350比例显示。遮罩层只能规定左边盒子范围内移动而且不给超出。

javascript实现电商放大镜效果

步骤:

1. 查找元素

 1.1 查找 main 总分区
 1.2 查找 small 盒子
 1.3 查找 small 盒子内的 img 小图片
 1.4 查找 mask 遮罩层
 1.5 查找 big 盒子
 1.6 查找 big 盒子内的 img 大图片 

2. 鼠标移入 main 的时候

 2.1 显示 遮罩盒子
 2.2 显示 大图分区

3. 鼠标移出 main 的时候

 3.1 隐藏 遮罩盒子
 3.2 隐藏 大图分区

4. 鼠标在 main 移动的时候 !!!

 4.1 遮罩盒子 跟随 鼠标移动
 4.2 遮罩盒子 在 鼠标中心 处理
 4.3 遮罩盒子 在 分区边界 内移动处理
 4.4 大图片 <反向> <按比例> 跟随 鼠标移动

 注意. 获取元素偏移值和宽高

 1. 获取 分区 的 水平,垂直偏移值
 2. 获取 分区 的 宽度,高度
 3. 获取 遮罩盒子 的 宽度,高度 (隐藏的盒子无法获取宽高)
 4. 获取 大图片 的 宽度,高度 (隐藏的盒子无法获取宽高)

html代码:

<body>
 <!-- 整个大盒子 -->
 <div class="main" id="main">
  <div class="small">
   <!--小图-->
   <img alt="" class="smallImg" src="../img/iphoneX.jpg" width="350" />
   <!-- 遮挡层,黄色的小方块 -->
   <div class="mask"></div>
  </div>
  <!--大层-->
  <div class="big">
   <!--大图-->
   <img alt="" class="bigImg" src="../img/iphoneX.jpg" width="800" />
  </div>
 </div>
</body>

css代码:

<style>
  * {
   margin: 0;
   padding: 0;
  }
 
  .main {
   width: 350px;
   height: 350px;
   margin: 100px;
   border: 1px solid #ccc;
   position: relative;
  }
 
  .big {
   width: 400px;
   height: 400px;
   position: absolute;
   top: 0;
   left: 360px;
   border: 1px solid #ccc;
   overflow: hidden;
   display: none;
  }
 
  .mask {
   width: 175px;
   height: 175px;
   background: rgba(255, 255, 0, 0.4);
   position: absolute;
   top: 0px;
   left: 0px;
   /* 把鼠标指针换成移动图标 */
   cursor: move;
   display: none;
  }
 
  .small {
   position: relative;
   height: 350px;
   width: 350px;
  }
 
  .active .mask,
  .active .big {
   display: block;
  }
 
  .big img {
   /* 相对定位:相对自己原本的位置定位,原来的位置保留的 */
   position: absolute;
  }
</style>

javascript代码:

<script>
 //查找元素
 var main = document.querySelector(".main");
 var small = document.querySelector(".small"); //左边小盒子
 var smallImg = document.querySelector(".smallImg");
 var mask = document.querySelector(".mask"); //黄色遮罩层
 var big = document.querySelector(".big");//右边小盒子
 var bigImg = document.querySelector(".big .bigImg");
 
 //2. 鼠标移入 main 的时候
 //2.1 显示 遮罩盒子
 // 2.2 显示 大图分区
 main.onmouseenter=function () {
  mask.style.display="block";
  big.style.display="block";
 };
 main.onmouseleave=function () {
  mask.style.display="none";
  big.style.display="none";
 };
 // 4. 鼠标在 main 移动的时候 !!!
 //  4.1 遮罩盒子 跟随 鼠标移动
 // 4.2 遮罩盒子 在 鼠标中心 处理
 // 4.3 遮罩盒子 在 分区边界 内移动处理
 // 4.4 大图片 <反向> <按比例> 跟随 鼠标移动
 small.onmousemove=function (e) {
  var x=e.pageX-100-(175/2);  //盒子的宽高为300px,因为鼠标默认在左上角。因为需要向左移动自身一半
  var y=e.pageY-100-(175/2);  盒子的宽高为300px,因为鼠标默认在左上角。因为需要向下移动自身一半
  if(x<0) x=0;      //规定遮罩层移动范围。如果遮罩层超出了小盒子边框,x就重置为0.
  if(y<0) y=0;      // //规定遮罩层移动范围。如果遮罩层超出了小盒子边框,y就重置为0.
  if(x>175) x=175;     //遮罩层本身的宽高为175
  if(y>175) y=175;     
  mask.style.top=(y)+"px";
  mask.style.left=(x)+"px";
  bigImg.style.top=(-y*(800/350))+"px";  //右边放大效果,以800:350显示
  bigImg.style.left=(-x*(800/350))+"px";  //在xy前面加-号是因为需要反向显示
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
jquery 回车事件实现代码
Aug 23 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
javascript表单验证和Window详解
Dec 11 Javascript
js完美解决IE6不支持position:fixed的bug
Apr 24 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
详解Js模板引擎(TrimPath)
Nov 22 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
vue.js element-ui validate中代码不执行问题解决方法
Dec 18 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
用webAPI实现图片放大镜效果
Nov 23 #Javascript
Vue 的 v-model用法实例
Nov 23 #Vue.js
JavaScript实现网页留言板功能
Nov 23 #Javascript
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
js观察者模式的弹幕案例
Nov 23 #Javascript
js异步接口并发数量控制的方法示例
Nov 22 #Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
You might like
PHP clearstatcache()函数详解
2010/03/02 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
JS location几个方法小姐
2008/07/09 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
python实现大文件分割与合并
2019/07/22 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
仓库主管的岗位职责
2013/12/04 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
《秋思》教学反思
2016/02/23 职场文书
文书工作总结(范文)
2019/07/11 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
python神经网络编程之手写数字识别
2021/05/08 Python
Python机器学习之决策树和随机森林
2021/07/15 Javascript
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
windows系统搭建WEB服务器详细教程
2022/08/05 Servers