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实现浮点数转十六进制字符
Oct 29 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
javascript中直接引用Microsoft的COM生成Word
Jan 20 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
Jun 23 Javascript
一款简单的jQuery图片标注效果附源码下载
Mar 22 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
Sep 22 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 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
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
Javascript中With语句用法实例
2015/05/14 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
python记录程序运行时间的三种方法
2017/07/14 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python在文本开头插入一行的实例
2018/05/02 Python
Flask-Mail用法实例分析
2018/07/21 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
python实现字符串和数字拼接
2020/03/02 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
二手书店创业计划书
2014/01/16 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
离职信范文
2015/06/23 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
导游词之青岛太清宫
2019/12/13 职场文书