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获取GridView选择的行内容
Apr 14 Javascript
javscript对象原型的一些看法
Sep 19 Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
jquery iframe操作详细解析
Nov 20 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
Dec 31 Javascript
js监听鼠标事件控制textarea输入字符串的个数
Sep 29 Javascript
JavaScript基础知识之方法汇总结
Jan 24 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
详解Vue 开发模式下跨域问题
Jun 06 Javascript
vue better-scroll插件使用详解
Jan 25 Javascript
在Vue 中获取下拉框的文本及选项值操作
Aug 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
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python中的逆序遍历实例
2019/12/25 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
如何理解Python中包的引入
2020/05/29 Python
Python定义一个函数的方法
2020/06/15 Python
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
高一政治教学反思
2014/01/28 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
党员评议自我评价
2015/03/03 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers