原生javascript實現(xiàn)圖片放大鏡效果
當我們在電商網(wǎng)站上購買商品時,經(jīng)常會看到這樣一種效果,當我們把鼠標放到我們?yōu)g覽的商品圖片上時,會出現(xiàn)類似放大鏡一樣的一定區(qū)域的放大效果,方便消費者觀察商品。今天我對這一技術(shù),進行簡單實現(xiàn),實現(xiàn)圖片放大鏡效果。
我在代碼中進行了代碼編寫的思路的說明和詳細的代碼注釋,方便讀者,請看代碼:
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{margin:0px; padding:0px;}
.small-box {
width:300px;
height:300px;
margin-left:100px;
margin-top:100px;
border:1px #ccc solid;
cursor:move;
float:left;
position:relative;
}
.small-box img {
width:300px;
height:300px;
}
.tool {
width:150px;
height:150px;
background-color:gold;
opacity:0.6;
filter:alpha(opacity=60);
position:absolute;
left:0px;
top:0px;
display:none;
}
.tool.active {
display:block;
}
.big-box {
width:300px;
height:300px;
border:1px #ccc solid;
overflow:hidden;
float:left;
margin-top:100px;
position:relative;
display:none;
}
.big-box.active {
display:block;
}
.big-box img {
width:600px;
height:600px;
position:absolute;
}
</style>
</head>
<body>
<div class="small-box" id="smallBox">
<img src="img1.jpg"/>
<div class="tool" id="tool"></div>
</div>
<div class="big-box" id="bigBox">
<img src="img1.jpg" id="bigImg" />
</div>
<script>
/*
第一步:當頁面加載完后,獲取所要操作的節(jié)點對象。
第二步:為smallBox添加一個鼠標浮動事件
當鼠標浮動到smallBox可視區(qū)域的時候,顯示出小黃盒子tool
和右邊的大盒子(小黃盒子的放大版)bigBox
添加active
為smallBox添加一個鼠標離開事件
隱藏小黃盒子和右邊的大盒子
去掉active
第三步:為smallBox添加一個鼠標移動事件
小黃盒子tool要跟著鼠標的坐標移動
右邊的大盒子里的圖片也跟著指定的比例移動
*/
var smallBox = document.getElementById("smallBox");//小盒子
var tool = document.getElementById("tool");//小盒子中的黃色區(qū)域
var bigBox = document.getElementById("bigBox");//大盒子
var bigImg = document.getElementById("bigImg");//放大的圖片
//鼠標進入小盒子區(qū)域內(nèi),顯示黃色區(qū)域和大盒子
smallBox.onmouseenter = function(){
tool.className = "tool active";
bigBox.className = "big-box active";
}
//鼠標離開小盒子區(qū)域,不顯示黃色區(qū)域和大盒子
smallBox.onmouseleave = function(){
tool.className = "tool";
bigBox.className = "big-box";
}
//鼠標在小盒子內(nèi)移動
smallBox.onmousemove = function(e){
var _e = window.event||e;//事件對象
var x = _e.clientX-this.offsetLeft-tool.offsetWidth/2;//事件對象在小盒子內(nèi)的橫向偏移量
var y = _e.clientY-this.offsetTop-tool.offsetHeight/2;//豎向偏移量
if(x<0){
x = 0;//當左偏移出小盒子時,設(shè)為0
}
if(y<0){
y = 0;//當上偏移出小盒子時,設(shè)為0
}
if(x>this.offsetWidth-tool.offsetWidth){
x = this.offsetWidth-tool.offsetWidth;//當右偏移出小盒子時,設(shè)為小盒子的寬度-黃色放大區(qū)域?qū)挾?
}
if(y>this.offsetHeight-tool.offsetHeight){
y = this.offsetHeight-tool.offsetHeight;//當下偏移出小盒子時,設(shè)為小盒子的高度-黃色放大區(qū)域高度
}
tool.style.left = x + "px";//黃色放大區(qū)域距離小盒子左偏距
tool.style.top = y + "px";//黃色放大區(qū)域距離小盒子上偏距
bigImg.style.left = -x*2 + "px";//放大圖片移動方向相反,偏移距離加倍
bigImg.style.top = -y*2 + "px";
}
</script>
</body>
</html>
這里,我并沒有對代碼中css樣式,JavaScript行為進行和html結(jié)構(gòu)的分離,方便讀者閱讀和運行。
有讀者可能考慮,獲取事件對象的偏移距離時直接使用offsetX和offsetY屬性,省去了計算,但是筆者在試驗時,出現(xiàn)了異常,黃色放大區(qū)域并不能穩(wěn)定的隨著鼠標進行移動,筆者認為,當時用offsetX和offsetY時,執(zhí)行onmousemove會不斷地出發(fā)onmouseover,而onmouseover會產(chǎn)生事件傳播,從而導(dǎo)致在獲取offsetX時出現(xiàn)異常。最終,筆者采用上述代碼中的方法,能夠出現(xiàn)穩(wěn)定的效果。讀者可以自行運行代碼,查看效果。這里附上筆者的效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js放大鏡放大圖片效果
- JavaScript圖片放大鏡效果代碼[代碼比較簡單]
- JavaScript 圖片放大鏡(可拖放、縮放效果)
- JavaScript 圖片切割效果(放大鏡)
- 圖片放大鏡jquery.jqzoom.js使用實例附放大鏡圖標
- JS實現(xiàn)圖片放大鏡效果的方法
- 利用javascript實現(xiàn)的三種圖片放大鏡效果實例(附源碼)
- JavaScript圖片放大技術(shù)(放大鏡)實現(xiàn)代碼分享
- JS實現(xiàn)圖片放大鏡插件詳解
- js圖片放大鏡實例講解(必看篇)
- js canvas實現(xiàn)放大鏡查看圖片功能
- JavaScript實現(xiàn)多張圖片放大鏡效果示例【不限定圖片尺寸,rem單位】
相關(guān)文章
Bootstrap 3.x打印預(yù)覽背景色與文字顯示異常的解決
前幾天同事有個問題咨詢我,他在調(diào)用print()來打印頁面,發(fā)現(xiàn)打印預(yù)覽頁面上的背景色無法顯示以及文字總是顯示為黑色,感覺非常奇怪,我通過測試發(fā)現(xiàn)是Bootstrap的問題,現(xiàn)在將解決的方法分享給大家,希望可以幫助到同樣遇到這個問題的朋友們,下面來一起看看。2016-11-11
Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實例代碼
本文通過實例代碼給大家介紹了Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-06-06
淺談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題
下面小編就為大家?guī)硪黄獪\談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
Javascript的異步函數(shù)和Promise對象你了解嗎
這篇文章主要為大家詳細介紹了Javascript異步函數(shù)和Promise對象,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
微信小程序云函數(shù)添加數(shù)據(jù)到數(shù)據(jù)庫的方法
這篇文章主要介紹了微信小程序云函數(shù)添加數(shù)據(jù)到數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

