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实现动态CSS换肤技术的脚本
Jun 29 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
谈一谈javascript闭包
Jan 28 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
vue-cli配置环境变量的方法
Jul 09 Javascript
vue proxy 的优势与使用场景实现
Jun 15 Javascript
解决vant的Toast组件时提示not defined的问题
Nov 11 Javascript
【js设计模式】SOLID五大设计原则
Mar 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
laravel请求参数校验方法
2019/10/10 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
详解vue axios二次封装
2018/07/22 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
2013届毕业生求职信范文
2013/11/20 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
运动会加油稿20字
2014/11/15 职场文书
工程部文员岗位职责
2015/02/04 职场文书
最感人的道歉情书
2015/05/12 职场文书
新生开学寄语大全
2015/05/28 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
安全责任协议书范本
2016/03/23 职场文书