成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁javascript淘寶主圖放大鏡功能

javascript淘寶主圖放大鏡功能

來源:九壹網(wǎng)
工欲善其事,必先利其器。想要實現(xiàn)某一種效果,我們必須要先了解其中的原理。
放大鏡的功能就是通過獲取鼠標在小圖中的位置,然后根據(jù)大小圖的尺寸比例換算出大圖需要顯示的部分,然后使用定位讓大圖要顯示的部分出現(xiàn)在右邊的邊框內(nèi)。
然后看代碼,根據(jù)代碼看講解會更容易理解。

html部分

<!DOCTYPE html> 
<html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <title>放大鏡效果</title> 
 <link rel="stylesheet" href="magnifier.css"> 
</head> 
<body> 
 <div id="wrapper"> 
 <!--小圖-->
 <div id="img_min"> 
 <!--圖片-->
 <img src="test.jpg" alt="min"> 
 <!--跟隨鼠標的白塊-->
 <p id="mousebg"></p> 
 </div> 
 <!--大圖-->
 <div id="img_max"><img id="img2_img" src="test.jpg" alt="max"></div> 
 </div> 
 <script type="text/javascript" src="magnifier.js"></script> 
</body> 
</html>

css部分

*{ 
 margin: 0; 
 padding: 0; 
} 
div{ 
 position: relative; 
} 
div>div{ 
 width: 300px; 
 height: 300px; 
 float: left; 
 margin: 100px; 
 overflow: hidden; 
} 
#img_min>img{ 
 /*display: block;*/
 width: 300px; 
} 
#img_max{ 
 display: none; 
 
} 
#img_max>img{ 
 position: absolute; 
 top: 0; 
 left: 0; 
 display: block; 
 width: 1500px; 
} 
#mousebg{ 
 display: none; 
 position: absolute; 
 width: 60px; 
 height: 60px; 
 background-color: rgba(255,255,255,.7); 
 top: 0; 
 left: 0; 
}

最重要的javascript部分

window.onload = function () { 
 var img1 = document.getElementById('img_min');//小圖盒子 
 var img2 = document.getElementById('img_max');//大圖盒子 
 var img2_img = document.getElementById('img2_img');//大圖圖片 
 var wrap = document.getElementById('wrapper'); 
 var mousebg = document.getElementById('mousebg');//鼠標白塊 
 var mul = 5; 
 //當某一個模塊dispaly:none的時候不能使用offsetWidth獲取它的寬高 
 img1.onmouseover = function () { 
 //鼠標進入 
 img2.style.display = 'block'; 
 mousebg.style.display = 'block'; 
 
 } 
 img1.onmouseout = function () { 
 //鼠標離開 
 img2.style.display = 'none'; 
 mousebg.style.display = 'none'; 
 } 
 img1.onmousemove = function (event) { 
 var _event = event||window.event;//兼容性處理 
 var mouseX = _event.clientX - wrap.offsetLeft - img1.offsetLeft; 
 //計算鼠標相對與小圖的位置 
 var mouseY = _event.clientY - wrap.offsetTop - img1.offsetTop; 
 
 //特殊情況處理,分別靠近四條邊的時候 
 if(mouseX<mousebg.offsetWidth/2){ 
 mouseX = mousebg.offsetWidth/2; 
 } 
 if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
 mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
 } 
 if(mouseY<mousebg.offsetHeight/2){ 
 mouseY = mousebg.offsetHeight/2; 
 } 
 if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
 mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
 } 
 //計算大圖的顯示范圍 
 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
 img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 
 //使鼠標在白塊的中間 
 mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; 
 mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px"; 
 
 } 
}

如果你看完代碼和注釋已經(jīng)理解了,用李云龍的一句話說:“哎呀,你小子tnd還真是個天才”。那么下面的解析部分你快速的瀏覽完就OK了。

解析部分:

html和css部分都是簡單的布局代碼,不再講解,js部分代碼也比較簡單,我們直接講解鼠標移動事件部分的代碼。
首先用一張圖來解釋一下獲取鼠標相對與小圖位置的原理:

20161031140826605.jpg

可以看到通過代碼中的運算,我們所獲取的值就是鼠標相對于img1左上角的值。
理解了這一步之后,其實可以說我們的工作已經(jīng)完成了一半了。
然后,我們先跳過特殊情況的處理,直接進行右邊圖片定位的基本運算。
因為有用到offsetWidth、offsetHeight、style.width、style.height屬性,其中style.width、style.height和offsetWidth、offsetHeight的范圍是相同的,其他不同我會在另一篇博客中詳細描述。我們先用一張圖了解下這幾個屬性,同時和上面的幾個屬性進行對比(圖片來自互聯(lián)網(wǎng),侵刪)

20161031140826605.jpg

然后我們講解代碼:

右邊大圖框中的圖片使用style.left定位在大圖框中的位置,負號是因為我們鼠標的運動方向剛好是和我們大圖框中的圖片運動的方向相反,mul則是根據(jù)大圖和小圖的尺寸計算出來的比例,-mul*mouseX計算出來的其實就是圖片在大圖框中的相對位置,但是此時你會發(fā)現(xiàn)你鼠標所在的位置在右邊是在圖框的左上角的,所以我們要加上一個 img2.offsetWidth/2 來讓圖片居中顯示。同樣我們在縱坐標進行相同的處理就好了。

//計算大圖的顯示范圍
 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px";
 img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px";

下面我們就要進行特殊情況的處理了,做到上一步的時候你會發(fā)現(xiàn),在鼠標移動到邊緣的時候,鼠標那個小白塊有時候會跑出圖片的范圍,所以我們就要進行處理將它在圖片的范圍內(nèi),因為鼠標是在白色透明塊的中間,所以我們就是將鼠標在距離圖片邊框上下左右二分之一白塊長/寬的位置即可。

//特殊情況處理,分別靠近四條邊的時候
 if(mouseX<mousebg.offsetWidth/2){
 mouseX = mousebg.offsetWidth/2;
 }
 if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){
 mouseX = img1.offsetWidth-mousebg.offsetWidth/2;
 }
 if(mouseY<mousebg.offsetHeight/2){
 mouseY = mousebg.offsetHeight/2;
 }
 if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){
 mouseY = img1.offsetHeight-mousebg.offsetHeight/2;
 }

當距離左邊小于二分之一寬的時候,我們就讓mouseX等于二分之一寬,這樣白塊就不會繼續(xù)移動,其他三個方向同理。
做完這一步,我們的效果也就全部完成了。
ps:抽象的地方可以通過畫圖來幫助理解。

Copyright ? 2019- 91gzw.com 版權所有 湘ICP備2023023988號-2

違法及侵權請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務所王興未律師提供法律服務