js实现放大镜效果

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 <style type="text/css">
 7 #pic{
 8     float:left;    
 9     }
10 #photo{
11     float:left;
12     height:100px;
13     width:100px;
14     margin-left:50px;
15     background-repeat:no-repeat;
16     background-image:url(1.jpg);
17     }
18 #mask{
19     width:50px;
20     height:50px;
21     background-color:#3FC;
22     position:absolute;
23     border-style:dashed;
24     border-color:#00F;
25     opacity:0.5;
26     }
27 </style>
28 </head>
29 
30 <body>
31 <div id="pic">
32 <img src="2.jpg" id="picture"  style="cursor:move"/>
33 </div>
34 <div id="photo"></div>
35 <div id="mask"></div>>
36 </body>
37 <script type="text/javascript">
38 document.body.addEventListener("mousemove",function(e){
39     var pho=document.getElementById("photo");
40     var pic=document.getElementById("pic");
41     {
42     var masker=document.getElementById("mask");
43     
44     masker.style.left=e.clientX-25+"px";
45     masker.style.top=e.clientY-25+"px";
46     pho.style.backgroundPosition=((50-e.clientX*2)+"px "+(50-e.clientY*2)+"px");
47     }
48 },false);
49 </script>
50 </html>

 

将小图名称改为2.jpg,大图名称改为1.jpg

以上即为demo部分,注意该demo请在非IE浏览器中运行,下面详细讲解一下设计思路

我主要采用一张大图跟一张小图,我这里小图的长宽都是大图的一半,当鼠标在小图上移动时,可以预先设定出一个区域,我的demo是以鼠标为中心,划分出一个50*50的预选区,所以在放大区就应该是100*100的区域,当鼠标移动到图片上时出现一个蒙版即预选区,同时在放大区生成一张大图。

代码部分:

1.html部分

1 <body>
2 <div id="pic">
3 <img src="2.jpg" id="picture"  style="cursor:move"/>
4 </div>
5 <div id="photo"></div>
6 <div id="mask"></div>>
7 </body>

三个div没什么好说的,一个图片区域pic,一个放大区photo,一个蒙版区mask

2.css部分

 1 <style type="text/css">
 2 #pic{
 3     float:left;    
 4     
 5     }
 6 
 7 #photo{
 8     float:left;
 9     height:100px;
10     width:100px;
11     margin-left:50px;
12     background-repeat:no-repeat;
13     background-image:url(1.jpg);
14     }
15 #mask{
16     width:50px;
17     height:50px;
18     background-color:#3FC;
19     position:absolute;
20     border-style:dashed;
21     border-color:#00F;
22     opacity:0.5;
23     }
24 </style>

需要说一下的是,mask蒙版区域大小为50*50,所以放大区相应的放大一倍即为100*100,opcity为蒙版透明度

3.js部分

 1 <script type="text/javascript">
 2 document.body.addEventListener("mousemove",function(e){
 3     var pho=document.getElementById("photo");
 4     var pic=document.getElementById("pic");
 5     {
 6     var masker=document.getElementById("mask");
 7     
 8     masker.style.left=e.clientX-25+"px";
 9     masker.style.top=e.clientY-25+"px";
10     pho.style.backgroundPosition=((50-e.clientX*2)+"px "+(50-e.clientY*2)+"px");
11     }
12 },false);
13 </script>

 

捕捉鼠标移动事件,e.clientX为当前鼠标坐标,以鼠标为中心做一个50*50的蒙版,然后在放大区以两倍的放大倍数显示出来。

posted @ 2012-08-26 00:06  leaven  阅读(3140)  评论(1编辑  收藏  举报