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实现文字与图片拖拽效果的方法
Feb 16 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
May 26 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
VUE脚手架具体使用方法
May 20 Javascript
细说webpack6 Babel的使用详解
Sep 26 Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
react合成事件与原生事件的相关理解
May 13 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
python中返回矩阵的行列方法
2018/04/04 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
Python多进程写入同一文件的方法
2019/01/14 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python pytest进阶之fixture详解
2019/06/27 Python
python django model联合主键的例子
2019/08/06 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Python如何操作docker redis过程解析
2020/08/10 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
机关作风建设整改方案
2014/10/27 职场文书
师德标兵事迹材料
2014/12/19 职场文书
雨花台导游词
2015/02/06 职场文书
防暑降温通知书
2015/04/27 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL