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与vbscript数据共享
Jan 09 Javascript
JavaScript Archive Network 集合
May 12 Javascript
关于document.cookie的使用javascript
Apr 11 Javascript
学习js在线html(富文本,所见即所得)编辑器
Dec 18 Javascript
基于javascript简单实现对身份证校验
Jan 25 Javascript
深入理解MVC中的时间js格式化
May 19 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
layer弹出层取消遮罩的方法
Sep 25 Javascript
node.js express捕获全局异常的三种方法实例分析
Dec 27 Javascript
JS setTimeout与setInterval的区别
Apr 20 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/11/16 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Python之时间和日期使用小结
2019/02/14 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
大一期末自我鉴定
2013/12/13 职场文书
党建目标管理责任书
2014/07/25 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
小学数学教学反思范文
2016/02/16 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技