js实现商城放大镜效果

效果:

  • 鼠标放上去会有半透明遮罩、右边会有大图片局部图。
  • 鼠标移动时右边的大图片也会局部移动。

技术点

Event

Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息被临时存储到一个指定的地方,也就是event对象,以方便我们在需要的时候调用。

事件捕获定位

`难点``:计算。

**接下来是demo分享:

css部分:

 * {
margin: 0;
padding: 0;
}
/* img {
vertical-align: top;
} */ .box {
width: 350px;
height: 350px;
position: relative;
border: 1px solid black;
margin: 150px 0 0 300px;
} .big {
width: 450px;
height: 450px;
position: absolute;
border: 1px solid black;
left: 400px;
top: 0;
display: none;
overflow: hidden;
} .small {
position: relative;
} .mask {
width: 100px;
height: 100px;
background-color: rgba(255, 255, 0, 0.4);
position: absolute;
left: 0;
top: 0;
cursor: move;
display: none;
} .big img {
position: absolute;
left: 0;
top: 0;
}

html结构部分:

 <div class="box" id="oBox">
<div class="small" id="oSmall">
<img src="./images/001.jpg" alt="">
<div class="mask" id="oMask"></div>
</div>
<div class="big" id="oBig">
<img src="./images/0001.jpg" alt="">
</div>
</div>
   //第一步获取节点
let box = document.getElementById('oBox');
let small = box.children[0]; //获取盒子的第一个子节点samll
let big = box.children[1]; //获取盒子的第二个子节点big
let mask = small.children[1]; //获取小盒子里的遮罩
let bigImg = big.children[0]; //获取大盒子里的图片 //鼠标进入small 遮罩(mask)大盒子(big)display:block
small.onmouseover = function() {
mask.style.display = 'block';
big.style.display = 'block'; }; //鼠标离开small 遮罩(mask)大盒子(big)display:none
small.onmouseout = function() {
mask.style.display = 'none';
big.style.display = 'none';
}; let x = 0;
let y = 0; small.onmousemove = function(even) {
var even = even || window.event; // 获取鼠标在small里的坐标
let x = even.clientX - this.offsetParent.offsetLeft - mask.offsetWidth / 2;
let y = even.clientY - this.offsetParent.offsetTop - mask.offsetHeight / 2; // 限制住鼠标的坐标导致遮罩的位置越界
if (x < 0) {
x = 0;
} else if (x > small.offsetWidth - mask.offsetWidth) {
x = small.offsetWidth - mask.offsetWidth;
} if (y < 0) {
y = 0;
} else if (y > small.offsetHeight - mask.offsetHeight) {
y = small.offsetHeight - mask.offsetHeight;
}
mask.style.left = x + 'px';
mask.style.top = y + 'px';
//注意大图片的方向
bigImg.style.top = -y * big.offsetHeight / small.offsetHeight + 'px';
bigImg.style.left = -x * big.offsetWidth / small.offsetWidth + 'px';
};

js原生淘宝京东宝贝放大镜效果的更多相关文章

  1. js 实现淘宝放大镜功能,可更改配置参数 带完整版解析代码[magnifier.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写淘宝放大镜效果 基本功能: 运 ...

  2. JS仿淘宝详情页菜单条智能定位效果

    类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...

  3. js 实现淘宝无缝轮播图效果,可更改配置参数 带完整版解析代码[slider.js]

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写淘宝无缝轮播图效果 需求分析: ...

  4. jquery仿淘宝规格颜色选择效果

    jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...

  5. 基于jQuery仿淘宝产品图片放大镜代码

    今天给大家分享一款 基于jQuery淘宝产品图片放大镜代码.这是一款基于jquery.imagezoom插件实现的jQuery放大镜.适用浏览器:IE8.360.FireFox.Chrome.Safa ...

  6. 原生js仿淘宝手机购买选项代码

    这是一款基于原生js实现仿淘宝手机信息购买选项效果源码,界面整体效果仿照淘宝购物选项设计,点击不同选项还可实时显示不同的价格计算结果,界面简洁大方.美观实用.可兼容目前最新的各类主流浏览器. 在线演示 ...

  7. javascript项目实战之原生js模拟淘宝购物车

    通过JavaScript实现类似与淘宝的购物车效果,包括商品的单选.全选.删除.修改数量.价格计算.数目计算.预览等功能的实现.实现的效果图: 相应的代码: shoppingCart.html < ...

  8. js实现淘宝首页图片轮播效果

    原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...

  9. javascript--淘宝页面的放大镜效果

    放大镜效果需求: 鼠标放入原图中,会出现一个黄色的遮盖层和一个放大的图片,鼠标移动时候,遮盖层会跟着鼠标一起移动,同时放大的图片会跟着一起移动. 实现过程: 1.鼠标移入,遮盖层和大图片显示 2.鼠标 ...

随机推荐

  1. ★Java语法(四)——————————运算符

    使用除法“/”  ,要特别注意数据类型的问题.若被除数和除数都是整形,且被除数不能被除数整除时,这时输出的结果为整数,(即整形数/整形数=整形数),这是因为整形变量无法保存小数点后面的数据所致,要特别 ...

  2. PHP安装环境搭建

    一. 安装PHP运行服务器 xampps-x64 二.安装PHP程序编辑软件(Zend Studo需要破解) 安装后打开,再关闭 把com.zend.php.core_10.6.0.v20140128 ...

  3. structure vs class in swift language

    Both class and structure can do: Define properties to store values Define methods to provide functio ...

  4. Day 22 面向对象编程

    面向对象基础 面向对象编程(抽象) 对象:特征和技能的结合体 面向对象编程:一个个对象进行交互 优点:扩展性非常强 缺点:逻辑非常复杂 类与对象 类(类别):一系列具有相同特征和技能的对象 现实世界中 ...

  5. Selenium三种等待的使用方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  6. JS 常用语法

    通常,通过 JavaScript,您需要操作 HTML 元素. 1.通过 id 找到 HTML 元素 2.通过标签名找到 HTML 元素 3.通过类名找到 HTML 元素 提示:通过类名查找 HTML ...

  7. [POI2005]BAN-Bank Notes

    [POI2005]BAN-Bank Notes POI真好玩.. 如果没有记录方案的话就是一个简单的二进制或单调队列优化多重背包的问题. 但是非常难受的是要记录方案. 而且空间只给了\(64MB\), ...

  8. MAC 快捷键&使用技巧等

    查看端口占用:命令 lsof -i tcp:port  (port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL    

  9. 从0到1发布一个Vue Collapse组件

    需求背景 最近在项目中遇到了一个类似Collapse的交互需求,因此到github上找了一圈关于Vue Collapse的相关轮子,但是多少都有些问题.有的是实现问题,例如vue2-collapse, ...

  10. python网络编程系列

    计算机基础 网络基础 套接字 socket模块 TCP协议和UDP协议 struct 模块简介 struct 模块解决 TCP黏包问题 socket 客户端的认证 socketserver模块初识 客 ...