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 相关文章推荐
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
javascript 二分法(数组array)
Apr 24 Javascript
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
JavaScript中发布/订阅模式的简单实例
Nov 05 Javascript
Jquery实现遮罩层的方法
Jun 08 Javascript
js全选按钮的实现方法
Nov 17 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 Javascript
js实现抽奖功能
Nov 24 Javascript
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
世界收音机发展史
2021/03/01 无线电
PHP排序算法的复习和总结
2012/02/15 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php fread函数使用方法总结
2019/05/28 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
React Router基础使用
2017/01/17 Javascript
RequireJs的使用详解
2017/02/19 Javascript
js简易版购物车功能
2017/06/17 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
npm 下载指定版本的组件方法
2018/05/17 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python 字符串定义
2009/09/25 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
商务会议邀请函
2014/01/09 职场文书
爱心倡议书范文
2014/05/12 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
python 如何用terminal输入参数
2021/05/25 Python
Java中try catch处理异常示例
2021/12/06 Java/Android
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python