jquery實現放大鏡簡單方法


網上有許多放大鏡的jquery的插件,但是用着不是那么得心應手,現在一頁代碼實現一個放大鏡功能,如果需要附加的功能可以手動修改,原理都在注釋里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!DOCTYPE html>
<html>
<head>
   <meta charset= "UTF-8" >
   <title>放大鏡效果</title>
   <style type= "text/css" >
     * {
       margin: 0;
       padding: 0;
     }
     .small {
       margin-left:40px;
       margin-top:50px;
       width: 150px;
       height: 150px;
       /*border: 2px solid yellow;*/
     }
      .small>img {
       width: 150px;
       height: 150px;
     }
     .slider {
       width: 50px;
       height: 50px;
       background: rgba(180,180,135,0.3);
       position: absolute;
       display: none;
     }
     #big {
       //設置為固定大小;
       width: 200px;
       height: 200px;
       position: absolute;
       /* border: 2px solid red;*/
       overflow: hidden;
       display: none;
     }
   </style>
</head>
<body>
<!--縮略圖-->
<p class = "small" >
   <img src= "thumb.jpg" />
   <!--放大鏡,在原圖不上的小塊-->
   <p class = "slider" ></p>
</p>
<!--放大鏡區域,大圖,設置為none隱藏-->
<p id= "big" >
   <img id= "bigImg" src= "big.jpg" />
</p>
even.clientX<input type= "text" value= "0" id= "test" /><br/>
even.clientY<input type= "text" value= "0" id= "test1" />
<script type= "text/javascript" src= "jquery-1.7.2.min.js" ></script>
<script type= "text/javascript" >
   var small = $( ".small" )[0];
   var slider = $( ".slider" )[0];
   var big = document.getElementById( "big" ); //試一試js獲取
   var bigImg = document.getElementById( "bigImg" );
//讓slider跟隨鼠標移動.給小的方塊綁定事件
   $( ".small" ).mousemove( function (e) {
     var even = e || event; //兼容火狐瀏覽器
     var x = even.clientX - small.offsetLeft - slider.offsetWidth/2;
     var y = even.clientY - small.offsetTop - slider.offsetHeight/2;
//測試even.clientX和even.clientY
     $( "#test" ).val(even.clientX);
     $( "#test1" ).val(even.clientY);
//水平方向的最大值
     var maxX = small.clientWidth - slider.clientWidth;
//豎直方向的最大值
     var maxY = small.clientHeight - slider.clientHeight;
     if (x<0){
//相當於超出左側,超出左側時,拉回
       x=0;
     }
//超出右側時拉回
     if (x>maxX){
       x = maxX;
     }
//頂部超出
     if (y<0){
       y=0;
     }
//底部超出
     if (y>maxY){
       y = maxY;
     }
     slider.style.top = (y+small.offsetTop) + "px" ;
     slider.style.left = (x+small.offsetLeft) + "px" ;
//放大的圖片的主要實現代碼:比例計算, big.scrollLeft是id=big的p中下方滾軸的位置
//由於id=big的p設置成固定大小,而圖片又非常大,所以這個p就像個放大鏡一樣在大圖上晃
//比例計算很簡單,鼠標在縮略圖的位置與縮略圖寬高比=鼠標在大圖位置與大圖寬高比,現在未知數是大圖鼠標的位置
     big.scrollLeft = x/maxX * (bigImg.clientWidth - big.clientWidth) ;
     big.scrollTop = y/maxY * (bigImg.clientHeight -big.clientHeight) ;
   });
//鼠標移入事件
   $( ".small" ).mouseenter( function (){
//鼠標移入到縮略圖時候實現,上面出現的小的方塊
     $( ".slider" ).css( "display" , "block" );
     $( "#big" ).css( "top" ,small.offsetTop+ "px" );
//隱藏的大圖=獲取左圖的左邊位置+寬度+10(隔開點縫隙與縮略圖)+px
     big.style.left = small.offsetLeft + small.offsetWidth + 10 + "px" ;
//右側的大圖區域顯示出來圖片
     $( "#big" ).css( "display" , "block" );
   });
//移除事件
//添加鼠標移出事件,鼠標移出縮略圖的時候
   $( ".small" ).mouseleave( function (){
     $( ".slider" ).css( "display" , "none" );
     $( "#big" ).css( "display" , "none" );
   });
</script>
</body>
</html>

相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM