JS實(shí)現(xiàn)圖片放大鏡插件詳解
前 言
我們大家經(jīng)常逛各種電商類的網(wǎng)站,商品的細(xì)節(jié)就需要用到放大鏡,這個(gè)大家一定不陌生,今天我們就做一個(gè)圖片放大鏡的插件,來看看圖片是如何被放大的……
先看一下我們要是實(shí)現(xiàn)的最終效果是怎么樣的

看完效果,大家有思路了嗎,沒有的話,我們一起來看一下是如何實(shí)現(xiàn)的~
1實(shí)現(xiàn)思路
① 要實(shí)現(xiàn)指上后放大的效果,需要做三個(gè)div,一個(gè)用來放原圖,另一個(gè)用來放放大效果的div,最后一個(gè)是鼠標(biāo)指上后需要放大部分的div(這個(gè)div我們用p標(biāo)簽來代替)。
② 確定放大比例,最重要的一點(diǎn),鼠標(biāo)指上的div與放大效果的div,和原圖與放大圖的比例要相等。
③ 將鼠標(biāo)指上后的放大效果顯示出來。
2具體實(shí)現(xiàn)步驟
首先,我們先來建三個(gè)div。
<div id="wrapper">
<!--小圖-->
<div id="img_min">
<!--圖片-->
<img src="img/11.png" alt="min">
<!--跟隨鼠標(biāo)的白塊-->
<p id="mousebg"></p>
</div>
<!--大圖-->
<div id="img_max">
<img id="img2_img" src="img/11.png" alt="max">
</div>
</div>
我們HTML代碼部分已經(jīng)全部完成,接下來,我們用JS來實(shí)現(xiàn)功能:
給原圖添加三個(gè)事件,分別是,鼠標(biāo)進(jìn)入,鼠標(biāo)移動(dòng),鼠標(biāo)移出。
當(dāng)鼠標(biāo)移入原圖時(shí),鼠標(biāo)指上時(shí)的div和放大效果的div同時(shí)顯示。
img1.onmouseover = function () {
//鼠標(biāo)進(jìn)入
img2.style.display = 'block';
mousebg.style.display = 'block';
}
鼠標(biāo)移出事件:
img1.onmouseout = function () {
//鼠標(biāo)離開
img2.style.display = 'none';
mousebg.style.display = 'none';
}
重點(diǎn)是當(dāng)鼠標(biāo)移動(dòng)時(shí),根據(jù)p標(biāo)簽與原圖的位置,來顯示大圖需要放大的部分。
var _event = event||window.event;//兼容性處理 var mouseX = _event.clientX - img1.offsetLeft; //計(jì)算鼠標(biāo)相對與小圖的位置 var mouseY = _event.clientY - img1.offsetTop;
在做位置分析時(shí),需要考慮四種臨界情況:
就是當(dāng)鼠標(biāo)從圖片的上、下、左、右剛剛進(jìn)入時(shí),并且這個(gè)距離小于鼠標(biāo)指上的div寬度的二分之一時(shí),放大效果的div顯示出來,并不移動(dòng)。
//特殊情況處理,分別靠近四條邊的時(shí)候
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;
}
最后,計(jì)算大圖的顯示范圍:
//計(jì)算大圖的顯示范圍 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; //使鼠標(biāo)在白塊的中間 mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px";
這樣,我們用JS實(shí)現(xiàn)圖片放大鏡的插件就全部完成了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS高級拖動(dòng)技術(shù) setCapture,releaseCapture
setCapture 的意思就是設(shè)置一個(gè)對象的方法被觸發(fā)的范圍,或者作用域。2011-07-07
Javascript實(shí)現(xiàn)快速排序(Quicksort)的算法詳解
排序算法(Sorting algorithm)是計(jì)算機(jī)科學(xué)最古老、最基本的課題之一,要想成為合格的程序員,就必須理解和掌握各種排序算法。2015-09-09
javascript+css3 實(shí)現(xiàn)動(dòng)態(tài)按鈕菜單特效
這篇文章主要介紹了javascript+css3 實(shí)現(xiàn)動(dòng)態(tài)按鈕菜單特效的相關(guān)資料,需要的朋友可以參考下2016-02-02
JavaScript之Date_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在JavaScript中,Date對象用來表示日期和時(shí)間。下面給大家介紹js中的date,需要的朋友參考下吧2017-06-06
點(diǎn)擊A元素觸發(fā)B元素的事件在IE8下會(huì)識別成A元素
IE8自動(dòng)觸發(fā)的事件源會(huì)識別成手動(dòng)點(diǎn)擊的元素就是點(diǎn)擊A元素觸發(fā)B元素的事件在IE8下會(huì)識別成A元素,需要的朋友可以參考下2014-09-09

