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 相关文章推荐
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
HTML5 canvas 9绘制图片实例详解
Sep 06 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
AngularJS折叠菜单实现方法示例
May 18 Javascript
使用JS编写的随机抽取号码的小程序
Aug 11 Javascript
使用veloticy-ui生成文字动画效果
Feb 08 Javascript
详解 vue better-scroll滚动插件排坑
Feb 08 Javascript
React倒计时功能实现代码——解耦通用
Sep 18 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
公司培训心得体会
2014/01/03 职场文书
社区包粽子活动方案
2014/01/21 职场文书
优秀学生事迹材料
2014/02/08 职场文书
2014年老干部工作总结
2014/11/21 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
二年级数学教学反思
2016/02/16 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python