javascript--淘宝页面的放大镜效果
放大镜效果需求:
鼠标放入原图中,会出现一个黄色的遮盖层和一个放大的图片,鼠标移动时候,遮盖层会跟着鼠标一起移动,同时放大的图片会跟着一起移动。
实现过程:
1.鼠标移入,遮盖层和大图片显示
2.鼠标离开,遮盖层和大图片隐藏
3.鼠标移动的时候,遮盖层和鼠标对应移动
4.遮盖层移动时候,大图片跟着移动
效果图:
原图 放大镜效果图
实现思路:
一、通过设置display属性,让遮盖层和大图片显示(block)和隐藏(none)。
二、获取鼠标在装有的小图片的盒子中的位置,并将该值赋给遮盖层的style.top和style.left属性,即让遮盖层和鼠标移动中位置相等。
三、注意设置遮盖层不能超过小盒子边框。
四、遮盖层移动,让大盒子中的图片跟着移动,大盒子移动位置需要利用数学方法计算。遮盖层移动距离/遮盖层最大移动距离=大图片移动位置/大图片最大移动距离
注意知识点:
一、样式设置
①装大图片的盒子必须设置长宽,如果不设置,大图片不会显示。
②装大图片盒子必须设置overflow:hidden,如果不设置,大图片位置不会固定,在网页总乱动。
③相对定位和绝对定位设置,遵循子绝父相
二、兼容性设置
①事件对象e的兼容性
②位置坐标的兼容性
③鼠标移入和鼠标移出兼容性
onmouseover \ onmouseout 和 onmouseenter \ onmouseleave,前一组对谷歌浏览器放心使用,但是在IE浏览器中会出现bug,起因是事件冒泡,所以选择后面一组。
上述两组事件在不触发事件冒泡的情况下表现是一样的,但是前一组会触发事件冒泡,后一组不会触发事件冒泡。
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>淘宝放大镜效果</title> <style type="text/css">
*{
padding: 0px;
margin: 0px;
} .box{
margin: 100px;
width: 350px;
height: 350px;
position: relative;
border: solid 1px gray;
} .cover{
width: 150px;
height: 150px;
opacity: 0.3;
background-color: yellow;
position: absolute;
top: 0px;
left: 0px;
display: none;
} .big{
position: absolute;
top: 0px;
left: 360px;
display: none;
overflow: hidden;
height: 400px;
width: 400px;
} .big img{
position: absolute;
}
</style>
</head>
<body>
<!-- 一个大盒子,用以控制位置 -->
<div id="box" class="box">
<!-- 小图片盒子 -->
<div class="small">
<img src="data:images/small.jpg" width="350px">
<!-- 遮盖层 -->
<div class="cover"></div>
</div>
<!-- 大图片 -->
<div class="big">
<img src="data:images/big.jpg" width="600px">
</div>
</div> <script type="text/javascript">
// 1.获取需要操作的元素
var box=document.getElementById('box');
var smallBox=box.children[0];
var bigBox=box.children[1];
var cover=smallBox.children[1];
var bigImage=bigBox.children[0];
//2.鼠标移动进入小盒子,遮盖层和大图片出现
box.onmouseenter=function(){
cover.style.display="block";
bigBox.style.display="block";
}
//3.鼠标离开小盒子,遮盖层和大图片隐藏
box.onmouseleave=function(){
cover.style.display="none";
bigBox.style.display="none";
} //4.鼠标移动,遮盖层跟着移动,并且鼠标点位于遮盖层的中心位置
box.onmousemove=function(e){
e = e || window.event;
//实现思路:鼠标在盒子中的位置=鼠标在文档中位置-盒子位置
var mouse_in_documentX=e.pageX || e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft);
var mouse_in_documentY=e.pageY || e.clientY+(document.documentElement.scrollTop || document.body.scrollTop);
//鼠标在盒子中的位置,就是遮盖层的位置
var mouse_in_boxX=mouse_in_documentX-box.offsetLeft;
var mouse_in_boxY=mouse_in_documentY-box.offsetTop;
//让鼠标位于遮盖层的中央
var coverX=mouse_in_boxX - cover.offsetWidth/2 ;
var coverY=mouse_in_boxY - cover.offsetHeight/2;
//遮盖层不能超过小盒子范围
coverX= ( coverX < 0 ) ? 0 : coverX;
coverY= ( coverY < 0 ) ? 0 : coverY;
coverX=( coverX > ( box.offsetWidth - cover.offsetWidth)) ? ( box.offsetWidth - cover.offsetWidth) : coverX;
coverY=( coverY > ( box.offsetHeight - cover.offsetHeight)) ? ( box.offsetHeight - cover.offsetHeight) : coverY;
cover.style.top=coverY + 'px';
cover.style.left=coverX + 'px';
//当遮盖层移动的时候,大图片跟着遮盖层移动(比例关系换算问题)
//公式:遮盖层移动距离/遮盖层最大移动距离=大图片移动距离/大图片最大移动距离
//故:大图片移动距离=遮盖层移动距离/遮盖层最大移动距离*大图片最大移动距离 //遮盖层最大距离
var coverMax=box.offsetWidth-cover.offsetWidth;
//大图片最大移动距离
var bigImageMax=bigImage.offsetWidth-bigBox.offsetWidth; var bigImageX=coverX*bigImageMax/coverMax;
var bigImageY=coverY*bigImageMax/coverMax; bigImage.style.top=-bigImageY+'px';
bigImage.style.left=-bigImageX+'px';
}
</script>
</body>
</html>
javascript--淘宝页面的放大镜效果的更多相关文章
- js原生淘宝京东宝贝放大镜效果
js实现商城放大镜效果 效果: 鼠标放上去会有半透明遮罩.右边会有大图片局部图. 鼠标移动时右边的大图片也会局部移动. 技术点: Event Event 是一个事件对象,当一个事件发生后,和当前事件发 ...
- jquery仿淘宝规格颜色选择效果
jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...
- selenium+python自动化84-chrome手机wap模式(登录淘宝页面)
前言 chrome手机wap模式登录淘宝页面,点击验证码无效问题解决. 切换到wap模式,使用TouchActions模块用tap方法触摸 我的环境 chrome 62 chromedriver 2. ...
- 基于jQuery仿淘宝产品图片放大镜代码
今天给大家分享一款 基于jQuery淘宝产品图片放大镜代码.这是一款基于jquery.imagezoom插件实现的jQuery放大镜.适用浏览器:IE8.360.FireFox.Chrome.Safa ...
- 使用CURL抓取淘宝页面
/** * 根据地址抓取淘宝页面html代码 * @param type $url 地址 * @return boolean */ public function getTaoBaoHtml($url ...
- Android:实现仿 美团/淘宝 多级分类菜单效果
本例要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果.当分类数量许多时能够考虑採用两级分类.而诸如美团这样的表现方式是一个不错的选择. 首先上效果图: 主要代码: 1. PopupWin ...
- C#编写Windows服务程序 (服务端),client使用 消息队列 实现淘宝 订单全链路效果
需求: 针对 淘宝提出的 订单全链路 产品接入 .http://open.taobao.com/doc/detail.htm?id=102423&qq-pf-to=pcqq.group oms ...
- JavaScript图形实例:图形放大镜效果
1. 基本四瓣花型图案 根据四瓣花卉线的参数方程: t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2); x=t*cos(θ)); y=t*sin(θ)); 编写如下的HTML ...
- 用HTML编写淘宝页面
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
随机推荐
- JSP初学者1
native2ascii.exe 是 Java 的一个文件转码工具,是将特殊各异的内容 转为 用指定的编码标准文体形式统一的表现出来,它通常位于 JDK_home\bin 目录下, 安装好 Java ...
- Qt之QSS(Q_PROPERTY-原始属性)
http://blog.csdn.net/liang19890820/article/details/51698536 版权声明:进步始于交流,收获源于分享!纯正开源之美,有趣.好玩.靠谱...作者: ...
- css:改变滚动条样式
以下亲测谷歌内核的浏览器有用,微软和火狐无效 body::-webkit-scrollbar {/*滚动条整体样式*/ width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ height: 1 ...
- sqlserver broker远端端点证书认证
1:采用windows验证的方法: CREATE ENDPOINT InstInitiatorEndpoint STATE = STARTED AS TCP ( LISTENER_PORT = ) F ...
- Oracle 11.1.0.6 导入导出bug
实验环境: 11.1.0.6.0 对ANONYMOUSUSER_ALL表中分区进行备份 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PA ...
- Jmeter入门10 jmeter加密串处理方式2:BeanShell PreProcessor
上一个博客讲了方式一:函数助手__digest加密,BeanShell PreProcessor也可以用java代码进行处理 线程组.参数.请求都直接使用上一个博客的. 第一步 添加BeanShell ...
- Android(java)学习笔记21:Java异常处理机制
1. try....catch / try...catch...finally package cn.itcast_02; /* * 我们自己如何处理异常呢? * A:try...catch... ...
- codeforces 676C
C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...
- POJ 1190 生日蛋糕 【DFS + 极限剪枝】
题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...
- 2018.12.1 web项目中解决乱码问题的一个工具类
<!-- 配置一个过滤器 编码格式的过滤器 --> <filter> <filter-name>encodeFilter</filter-name> & ...