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 浮点运算的问题分析与解决方法
Aug 27 Javascript
JavaScript检测实例属性, 原型属性
Feb 04 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
jQuery事件多次绑定与解绑问题实例分析
Feb 19 jQuery
小程序如何支持使用 async/await详解
Sep 12 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
vue+iview实现文件上传
Nov 17 Vue.js
JavaScript实现网页跨年倒计时
Dec 02 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
一个分页的论坛
2006/10/09 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
img的onload的另类用法
2008/01/10 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
python之生成多层json结构的实现
2020/02/27 Python
Python 自由定制表格的实现示例
2020/03/20 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
硕士生工作推荐信
2014/03/07 职场文书
道路交通安全实施方案
2014/03/12 职场文书
安全保证书范文
2014/04/29 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
煤矿安全协议书
2014/08/20 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
Python IO文件管理的具体使用
2022/03/20 Python