仿京东放大镜

  昨天跟朋友聊天时说到京东页面展示商品的放大镜,正好今天得空写了个demo。

  先说下原理:左边一张小图,右边是一张大图初始隐藏,当鼠标移入小图时大图出现。看到的大图范围只是一个比例关系很简单

  懵掉了?不怕  上代码

  大图的布局,超出父容器隐藏

<!--大图-->
<div id="max">
    <img src="img/max.jpg"/>
</div>

  放大镜滑块的位置:

var e = e||window.event;
var x = e.clientX-min.offsetLeft-slider.offsetWidth/2;
var y = e.clientY-min.offsetTop-slider.offsetHeight/2;

  接下来给放大镜滑块限定移动范围:

//设定放大镜滑块移动的范围
var maxWidth = min.clientWidth-slider.offsetWidth;
var maxHeight = min.clientHeight-slider.offsetHeight;
if(x<=0){
    x=0;
}else if(x>=maxWidth){
    x=maxWidth;
            }
if (y<=0) {
    y=0;
} else if(y>=maxHeight){
    y=maxHeight;
}
//放大镜滑块位置
slider.style.left = x+‘px‘;
slider.style.top = y+‘px‘;

  好像缺点什么,大图的位置呢!确定位置之前要设定个放大比例

//放大比例
var scale = maxImg.offsetWidth/minImg.offsetWidth;

  现在大图位置自然有了

//大图位置
maxImg.style.left = -x*scale+‘px‘;
maxImg.style.top = -y*scale+‘px‘;

有兴趣的童鞋可以查看源码

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <style type="text/css">
 7             /*小图容器*/
 8             #min{
 9                 border: 1px solid #ccc;
10                 position: relative;
11             }
12             /*放大镜滑块*/
13             #slider{
14                 width: 225px;
15                 height: 225px;
16                 background-color: lightyellow;
17                 position: absolute;
18                 top: 0;
19                 left: 0;
20                 opacity: 0.8;
21                 display: none;
22                 /*改变鼠标形状*/
23                 cursor: move;
24             }
25             /*大图容器*/
26             #max{
27                 width: 400px;
28                 height: 400px;
29                 border: 1px solid #ccc;
30                 position: absolute;
31                 overflow: hidden;
32                 top: 8px;
33                 left:470px ;
34                 display: none;
35             }
36             /*大图图片绝对定位*/
37             #max img{
38                 position: absolute;
39             }
40         </style>
41     </head>
42     <body>
43         <!--小图-->
44         <div id="min">
45             <!--放大镜滑块-->
46             <div id="slider"></div>
47             <img src="img/min.jpg"/>
48         </div>
49         <!--大图-->
50         <div id="max">
51             <img src="img/max.jpg"/>
52         </div>
53     </body>
54     <script type="text/javascript">
55         //封装函数  通过id获取元素
56         function get(type){
57             return document.getElementById(type);
58         }
59         var slider = get(‘slider‘),min = get(‘min‘),max = get(‘max‘);
60         var maxImg = document.querySelector(‘#max img‘);//获取大图
61         var minImg = document.querySelector(‘#min img‘);//获取小图
62         //鼠标移入事件
63         min.onmousemove = function(e){
64             slider.style.display = ‘block‘;
65             max.style.display = ‘block‘;
66             //让滑块随鼠标移动
67             var e = e||window.event;
68             var x = e.clientX-min.offsetLeft-slider.offsetWidth/2;
69             var y = e.clientY-min.offsetTop-slider.offsetHeight/2;
70             //设定放大镜滑块移动的范围
71             var maxWidth = min.clientWidth-slider.offsetWidth;
72             var maxHeight = min.clientHeight-slider.offsetHeight;
73             if(x<=0){
74                 x=0;
75             }else if(x>=maxWidth){
76                 x=maxWidth;
77             }
78             if (y<=0) {
79                 y=0;
80             } else if(y>=maxHeight){
81                 y=maxHeight;
82             }
83             //放大镜滑块位置
84             slider.style.left = x+‘px‘;
85             slider.style.top = y+‘px‘;
86             //放大比例
87             var scale = maxImg.offsetWidth/minImg.offsetWidth;
88             //大图位置
89             maxImg.style.left = -x*scale+‘px‘;
90             maxImg.style.top = -y*scale+‘px‘;
91
92         }
93         //鼠标移出事件
94         min.onmouseleave = function(){
95             slider.style.display = ‘none‘;
96             max.style.display = ‘none‘;
97         }
98     </script>
99 </html>

时间: 2024-08-02 06:13:00

仿京东放大镜的相关文章

0189 案例:仿京东放大镜效果

1.1.6 案例:仿京东放大镜 整个案例可以分为三个功能模块 鼠标经过小图片盒子, 黄色的遮挡层 和 大图片盒子显示,离开隐藏2个盒子功能 黄色的遮挡层跟随鼠标功能. 移动黄色遮挡层,大图片跟随移动功能. 1.1.7 案例分析 黄色的遮挡层跟随鼠标功能. 把鼠标坐标给遮挡层不合适.因为遮挡层坐标以父盒子为准. 首先是获得鼠标在盒子的坐标. 之后把数值给遮挡层做为left 和top值. 此时用到鼠标移动事件,但是还是在小图片盒子内移动. 发现,遮挡层位置不对,需要再减去盒子自身高度和宽度的一半.

浅谈android中仅仅使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是仅仅使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后续的复习.为什么会想到使用一个TextView来实现呢?因为最近公司在做一些优化的工作,其中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的,实现的代码冗余比较大,故此项目经理就说:小宏这个就交给你来优化了,并且还要保证有一定的扩展性,当时就懵逼了.不知道从何处开始

Jquery特效之=》仿京东多条件筛选特效

仿京东多条件筛选特效 品牌: 全部 惠普(hp) 联想(Lenovo) 联想(ThinkPad) 宏基(acer) 华硕 戴尔 三星 索尼 东芝 Gateway 微星 海尔 清华同方 富士通 苹果(Apple) 神舟 方正 优雅 价格: 全部 1000-2999 3000-3499 3500-3999 4000-4499 4500-4999 5000-5999 6000-6999 7000-9999 10000以上 尺寸: 全部 8.9英寸及以下 11英寸 12英寸 13英寸 14英寸 15英寸

仿京东商城左侧的一个导航条特效

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时

今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许的复习. 为什么会想到使用一个TextView来实现呢?由于近期公司在做一些优化的工作,当中就有一个倒计时样式,原来开发的这个控件的同事使用了多个TextView拼接在一起的.实现的代码冗余比較大.故此项目经理就说:小宏这个就交给你来优化了.而且还要保证有一定的扩展性,当时就懵逼了.不知道从何处開始

iOS仿京东分类菜单之UICollectionView内容

 iOS仿京东分类菜单之UICollectionView内容 在 上<iOS仿京东分类菜单实例实现>已经实现了大部分主体的功能,本文是针对右边集合列表进行修改扩展,使它达到分组的效果,本文涉及到的主要是UICollectionView的知识内容,左边列表的实现见上一篇文章,先看实现的效果图: 一:实体的创建 1.1分组实体的创建(tagID跟左边表格进行关联,roomArray是存放房间的数组,也就是单元格的集合) #import <Foundation/Foundation.h>

完美高仿精仿京东商城手机客户端android版源码

完美高仿精仿京东商城手机客户端android版源码,喜欢的朋友可以下载吧. 源码下载: http://code.662p.com/view/4876.html AndroidManifest.xml <?xml version="1.0" encoding="utf-8" ?> - <manifest android:versionCode="6952" android:versionName="2.7.0"

【Android源码】高仿京东商城

高仿京东商城 仿照京东商城做出的APP(仅实现了部分界面) 下载地址:http://www.dwz.cn/z8z3J 运行截图      

竖向导航-仿京东左侧导航大类效果

完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con