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 相关文章推荐
js的with语句使用方法
Sep 21 Javascript
javascript 三种编解码方式
Feb 01 Javascript
js实现简单的星级选择器提交效果适用于评论等
Oct 18 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
js时间日期格式化封装函数
Dec 02 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
jQuery实现可移动选项的左右下拉列表示例
Dec 26 Javascript
AngularJS实现页面定时刷新
Mar 14 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
JavaScript中的高级函数
Jan 04 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
vue前后分离调起微信支付
Jul 29 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
Banner程序
2006/10/09 PHP
php 设计模式之 单例模式
2008/12/19 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
简单的自定义php模板引擎
2016/08/26 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
php7下的filesize函数
2019/09/30 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
Python文件操作基本流程代码实例
2017/12/11 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
python getpass实现密文实例详解
2019/09/24 Python
python库matplotlib绘制坐标图
2019/10/18 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
python调用私有属性的方法总结
2020/07/24 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015教师年度考核评语
2015/03/25 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers