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中的标签语句
Jun 19 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
Jan 23 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
详解Vue-cli代理解决跨域问题
Sep 27 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
Sep 15 Javascript
Postman内建变量常用方法实例解析
Jul 28 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过程中的一些注意点的总结
2013/10/25 PHP
php中in_array函数用法探究
2014/11/25 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
初一生物教学反思
2014/01/18 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
廉洁校园实施方案
2014/05/25 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
村级个人对照检查材料
2014/08/22 职场文书
拾金不昧感谢信
2015/01/21 职场文书
学术会议通知范文
2015/04/15 职场文书
用电申请报告范文
2015/05/18 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL