JS实现电商商品展示放大镜特效


Posted in Javascript onJanuary 07, 2020

本文实例为大家分享了JS实现电商商品展示放大镜的具体代码,供大家参考,具体内容如下

知识点

1.使用children获取字标签组
2.求当前鼠标坐标
3.碰撞检测
4.大小盒子通过比例同步

运行效果

JS实现电商商品展示放大镜特效

代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
 * {
  margin: 0;
  padding: 0;
  list-style: none;
  border: none;
 }

 #box {
  width: 350px;
  height: 350px;
  margin: 100px 0 0 100px;
  position: relative;
 }

 #box > #small_box {
  height: 100%;
  width: 100%;
  border: 1px solid #cccccc;
  box-sizing: border-box;
  position: relative;
 }

 #box > #small_box > img {
  height: 100%;
  width: 100%;
 }

 #box > #small_box > #mask {
  width: 100px;
  height: 100px;
  background-color: rgba(255, 255, 0, .4);
  position: absolute;
  left: 0;
  top: 0;
  cursor: move;
  /*隐藏*/
  display: none;
 }

 #box > #big_box {
  height: 600px;
  width: 600px;
  border: 1px solid #cccccc;
  position: absolute;
  left: 360px;
  top: 0;
  overflow: hidden;
  display: none;
 }
 #box > #big_box > img{
  position: absolute;
  left: 0;
  top: 0;
 }
 #list {
  margin: 20px 0 0 100px;
 }

 #list ul li {
  float: left;
  margin: 5px;
  cursor: pointer;
 }
 </style>
</head>
<body>
<div id="box">
 <div id="small_box">
 <img src="images/pic001.jpg" alt="">
 <span id="mask"></span>
 </div>
 <div id="big_box">
 <img src="images/pic01.jpg" alt="">
 </div>
</div>
<div id="list">
 <ul>
 <li><img src="images/pic0001.jpg" alt=""></li>
 <li><img src="images/pic0002.jpg" alt=""></li>
 <li><img src="images/pic0003.jpg" alt=""></li>
 <li><img src="images/pic0004.jpg" alt=""></li>
 </ul>
</div>
<script src="../../MyTools/MyTools.js"></script>
<script>
 window.addEventListener('load', function (ev) {
 // 1. 获取标签
 var box = myTools.$('box'), s_box = box.children[0], b_box = box.children[1], mask = s_box.children[1];
 var list_Lis = myTools.$('list').getElementsByTagName('li');
  b_img = b_box.children[0];
 // 2. 监听鼠标进入小盒子
 s_box.addEventListener('mouseover', function (evt) {
  // 2.1 显示隐藏内容
  mask.style.display = 'block';
  b_box.style.display = 'block';
  // 2.2 监听鼠标移动
  s_box.addEventListener('mousemove', function (evt1) {
  var e = evt1 || window.event;
  // 2.3 求出鼠标坐标
  var pointX = e.pageX - box.offsetLeft - mask.offsetWidth * 0.5;
  var pointY = e.pageY - box.offsetTop - mask.offsetHeight * 0.5;
  // 2.4 边界碰撞检测
  if (pointX < 0) {
   pointX = 0
  } else if (pointX >= s_box.offsetWidth - mask.offsetWidth - 2) {
   pointX = s_box.offsetWidth - mask.offsetWidth - 2;
  }
  if (pointY < 0) {
   pointY = 0
  } else if (pointY >= s_box.offsetHeight - mask.offsetHeight - 2) {
   pointY = s_box.offsetHeight - mask.offsetHeight - 2;
  }
  // 2.5 让放大镜走起来
  mask.style.left = pointX + 'px';
  mask.style.top = pointY + 'px';
  // 2.6 让大盒子中图片走起来
  /*
  * smallX / bigX = sBox.width / bBox.width
  * bixX = smallX/(sBox.width / bBox.width)
  * */
  b_img.style.left = -pointX / (s_box.offsetWidth/b_box.offsetWidth) + 'px';
  b_img.style.top = -pointY / (s_box.offsetHeight/b_box.offsetHeight) + 'px';

  })
 });
 // 3. 监听鼠标离开小盒子
 s_box.addEventListener('mouseout', function (evt) {
  // 2.1 隐藏内容
  mask.style.display = 'none';
  b_box.style.display = 'none';
 });
 // 4. 监听鼠标点击li标签

 for (var i = 0; i < list_Lis.length; i++) {
  (function (i) {
  var li = list_Lis[i];
  li.addEventListener('mouseover',function (ev1) {
   s_box.children[0].src = 'images/pic0'+(i+1)+'.jpg';
   b_img.src = 'images/pic0'+(i+1)+'.jpg';
  });
  })(i);
 }
 });
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 Javascript
angularjs中的单元测试实例
Dec 06 Javascript
JavaScript中string对象
Jun 12 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
微信小程序开发之转发分享功能
Oct 22 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
jQuery+ajax实现文件上传功能
Dec 22 jQuery
JS实现字体背景跑马灯
Jan 06 #Javascript
JS实现音乐钢琴特效
Jan 06 #Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 #Javascript
Vue-CLI与Vuex使用方法实例分析
Jan 06 #Javascript
Vue前端项目部署IIS的实现
Jan 06 #Javascript
Vue学习之常用指令实例详解
Jan 06 #Javascript
Vue学习之组件用法实例详解
Jan 06 #Javascript
You might like
献给php初学者(入门学习经验谈)
2010/10/12 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
传智播客学习之java 反射
2009/11/22 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
Vue实现简易计算器
2020/02/25 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
浅谈Python type的使用
2019/11/19 Python
python定义类self用法实例解析
2020/01/22 Python
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
见习期自我鉴定
2013/11/07 职场文书
医学院学生的自我评价分享
2013/11/19 职场文书
《画》教学反思
2014/04/14 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
公司承诺函范文
2015/01/21 职场文书
乐山大佛导游词
2015/02/02 职场文书
面试通知邮件
2015/04/20 职场文书