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. iconfont在ios(safari)中的坑

    最近公司决定将项目图标整体迁移到iconfont,按网上常规方法,在安卓.pc端都没问题,唯独在ios的safari浏览器及微信内置浏览器中,iconfont始终在正常位置向下偏移,导致图标错乱. 网 ...

  2. Yearning + Inception SQL审核平台搭建

    Yearning 安装: 安装Nginxyum install nginx -y 按照顺序安装MySQLmysql-community-common-5.7.22-1.el6.x86_64.rpmmy ...

  3. C/C++关键字

    1. static关键字 作用 在函数体内静态变量具有记忆功能.在函数体内定义的静态变量离开时不会被清除,在下次函数调用的时候其值保持不变. 限制变量或函数的使用范围.static修饰的全局变量或者函 ...

  4. PAT_A1128#N Queens Puzzle

    Source: PAT A1128 N Queens Puzzle (20 分) Description: The "eight queens puzzle" is the pro ...

  5. eas启动服务器时非法组件

    EAS实例启动报系统中存在非法组件,实例启动失败:   组件检查机制,要求除了 $EAS_HOME eas\server\lib: $EAS_HOME \eas\server\deploy\files ...

  6. 定位IO瓶颈的方法,iowait低,IO就没有到瓶颈?

    通过分析mpstat的iowait和iostat的util%,判断IO瓶颈 IO瓶颈往往是我们可能会忽略的地方(我们常会看top.free.netstat等等,但经常会忽略IO的负载情况),今天给大家 ...

  7. [luogu4285 SHOI2008] 汉诺塔 (暴力,数学)

    传送门 Solution 强行猜测公式形如\(f_i=k\times f_{i-1}+b\),暴力求\(f_1,f_2,f_3\),剩下的递推就行 Code #include <cstdio&g ...

  8. laravel Job 和事件

    在做项目的时候,一直对Job和Event有个疑惑.感觉两者是相同的东西,搞不清楚两者的区别在哪里!经过一段时间的琢磨和查找了相关的资料,对Job和Event做了一些总结,以便记忆. Job Job既可 ...

  9. datawhale爬虫实训4

    DataWhale-Task4(爬取丁香园2) 任务:使用lxml爬虫帖子相关的回复与部分用户信息(用户名,头像地址,回复详情) 难点:需要登录才能看到所有回复 浏览器登录上去,查看cookies信息 ...

  10. 【3】Django创建第一个项目

    天地所以能长且久者,以其不自生,故能长生. --老子<道德经> 写在前面:Django在学习的过程中,我们会参考官方文档,从两部分进行讲解,第一部分主要是一个入门项目的搭建开发,第二部分是 ...