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 相关文章推荐
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
javascript三种代码注释方法
Jun 02 Javascript
Google 地图类型详解及示例代码
Aug 06 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 Javascript
JavaScript枚举选择jquery插件代码实例
Nov 17 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php中的比较运算符详解
2013/10/28 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php中Snoopy类用法实例
2015/06/19 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
javascript表单验证大全
2015/08/12 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
Python编程之属性和方法实例详解
2015/05/19 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python数组定义方法
2016/04/13 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
大学学风建设方案
2014/05/04 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
护士个人总结范文
2015/02/13 职场文书
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers