原生javascript實(shí)現(xiàn)圖片放大鏡效果
當(dāng)我們?cè)陔娚叹W(wǎng)站上購(gòu)買商品時(shí),經(jīng)常會(huì)看到這樣一種效果,當(dāng)我們把鼠標(biāo)放到我們?yōu)g覽的商品圖片上時(shí),會(huì)出現(xiàn)類似放大鏡一樣的一定區(qū)域的放大效果,方便消費(fèi)者觀察商品。今天我對(duì)這一技術(shù),進(jìn)行簡(jiǎn)單實(shí)現(xiàn),實(shí)現(xiàn)圖片放大鏡效果。
我在代碼中進(jìn)行了代碼編寫的思路的說(shuō)明和詳細(xì)的代碼注釋,方便讀者,請(qǐng)看代碼:
<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> /* 第一步:當(dāng)頁(yè)面加載完后,獲取所要操作的節(jié)點(diǎn)對(duì)象。 第二步:為smallBox添加一個(gè)鼠標(biāo)浮動(dòng)事件 當(dāng)鼠標(biāo)浮動(dòng)到smallBox可視區(qū)域的時(shí)候,顯示出小黃盒子tool 和右邊的大盒子(小黃盒子的放大版)bigBox 添加active 為smallBox添加一個(gè)鼠標(biāo)離開(kāi)事件 隱藏小黃盒子和右邊的大盒子 去掉active 第三步:為smallBox添加一個(gè)鼠標(biāo)移動(dòng)事件 小黃盒子tool要跟著鼠標(biāo)的坐標(biāo)移動(dòng) 右邊的大盒子里的圖片也跟著指定的比例移動(dòng) */ var smallBox = document.getElementById("smallBox");//小盒子 var tool = document.getElementById("tool");//小盒子中的黃色區(qū)域 var bigBox = document.getElementById("bigBox");//大盒子 var bigImg = document.getElementById("bigImg");//放大的圖片 //鼠標(biāo)進(jìn)入小盒子區(qū)域內(nèi),顯示黃色區(qū)域和大盒子 smallBox.onmouseenter = function(){ tool.className = "tool active"; bigBox.className = "big-box active"; } //鼠標(biāo)離開(kāi)小盒子區(qū)域,不顯示黃色區(qū)域和大盒子 smallBox.onmouseleave = function(){ tool.className = "tool"; bigBox.className = "big-box"; } //鼠標(biāo)在小盒子內(nèi)移動(dòng) smallBox.onmousemove = function(e){ var _e = window.event||e;//事件對(duì)象 var x = _e.clientX-this.offsetLeft-tool.offsetWidth/2;//事件對(duì)象在小盒子內(nèi)的橫向偏移量 var y = _e.clientY-this.offsetTop-tool.offsetHeight/2;//豎向偏移量 if(x<0){ x = 0;//當(dāng)左偏移出小盒子時(shí),設(shè)為0 } if(y<0){ y = 0;//當(dāng)上偏移出小盒子時(shí),設(shè)為0 } if(x>this.offsetWidth-tool.offsetWidth){ x = this.offsetWidth-tool.offsetWidth;//當(dāng)右偏移出小盒子時(shí),設(shè)為小盒子的寬度-黃色放大區(qū)域?qū)挾? } if(y>this.offsetHeight-tool.offsetHeight){ y = this.offsetHeight-tool.offsetHeight;//當(dāng)下偏移出小盒子時(shí),設(shè)為小盒子的高度-黃色放大區(qū)域高度 } tool.style.left = x + "px";//黃色放大區(qū)域距離小盒子左偏距 tool.style.top = y + "px";//黃色放大區(qū)域距離小盒子上偏距 bigImg.style.left = -x*2 + "px";//放大圖片移動(dòng)方向相反,偏移距離加倍 bigImg.style.top = -y*2 + "px"; } </script> </body> </html>
這里,我并沒(méi)有對(duì)代碼中css樣式,JavaScript行為進(jìn)行和html結(jié)構(gòu)的分離,方便讀者閱讀和運(yùn)行。
有讀者可能考慮,獲取事件對(duì)象的偏移距離時(shí)直接使用offsetX和offsetY屬性,省去了計(jì)算,但是筆者在試驗(yàn)時(shí),出現(xiàn)了異常,黃色放大區(qū)域并不能穩(wěn)定的隨著鼠標(biāo)進(jìn)行移動(dòng),筆者認(rèn)為,當(dāng)時(shí)用offsetX和offsetY時(shí),執(zhí)行onmousemove會(huì)不斷地出發(fā)onmouseover,而onmouseover會(huì)產(chǎn)生事件傳播,從而導(dǎo)致在獲取offsetX時(shí)出現(xiàn)異常。最終,筆者采用上述代碼中的方法,能夠出現(xiàn)穩(wěn)定的效果。讀者可以自行運(yùn)行代碼,查看效果。這里附上筆者的效果圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js放大鏡放大圖片效果
- JavaScript圖片放大鏡效果代碼[代碼比較簡(jiǎn)單]
- JavaScript 圖片放大鏡(可拖放、縮放效果)
- JavaScript 圖片切割效果(放大鏡)
- 圖片放大鏡jquery.jqzoom.js使用實(shí)例附放大鏡圖標(biāo)
- JS實(shí)現(xiàn)圖片放大鏡效果的方法
- 利用javascript實(shí)現(xiàn)的三種圖片放大鏡效果實(shí)例(附源碼)
- JavaScript圖片放大技術(shù)(放大鏡)實(shí)現(xiàn)代碼分享
- JS實(shí)現(xiàn)圖片放大鏡插件詳解
- js圖片放大鏡實(shí)例講解(必看篇)
- js canvas實(shí)現(xiàn)放大鏡查看圖片功能
- JavaScript實(shí)現(xiàn)多張圖片放大鏡效果示例【不限定圖片尺寸,rem單位】
相關(guān)文章
js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能
這篇文章主要介紹了js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能的相關(guān)資料,需要的朋友可以參考下2015-12-12使用JavaScript進(jìn)行進(jìn)制轉(zhuǎn)換將字符串轉(zhuǎn)換為十進(jìn)制
JS 是一個(gè)很神奇的語(yǔ)言,可以將任意進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制,如二進(jìn)制,八進(jìn)制,十六進(jìn)制, 第二數(shù)數(shù)不寫即為最常用的轉(zhuǎn)換為整型十進(jìn)制2014-09-09一個(gè)頁(yè)面放2段圖片滾動(dòng)代碼出現(xiàn)沖突的問(wèn)題如何解決
這是一段調(diào)用圖片流動(dòng)的代碼?為什么我在首頁(yè)同時(shí)復(fù)制出二段代碼后圖片不能流動(dòng)顯示了?遇此問(wèn)題很是疑惑,于是搜集整理一些實(shí)用技巧以解大伙們的燃眉之急,需要了解的朋友可以參考下2012-12-12JSON中雙引號(hào)的輪回使用過(guò)程中一定要小心
如果JSON對(duì)象中有屬性是包含雙引號(hào)當(dāng)轉(zhuǎn)換成字符串形式,將自動(dòng)加上反斜線,詳細(xì)請(qǐng)祥看本文2014-03-03淺談JavaScript中運(yùn)算符的優(yōu)先級(jí)
這篇文章主要給大家簡(jiǎn)單介紹了JavaScript中運(yùn)算符的優(yōu)先級(jí)的相關(guān)問(wèn)題,十分的實(shí)用,有需要的小伙伴可以參考下。2015-07-07基于JS實(shí)現(xiàn)省市聯(lián)動(dòng)效果代碼分享
這篇文章主要介紹了基于JS實(shí)現(xiàn)省市聯(lián)動(dòng)效果代碼的相關(guān)資料,非常實(shí)用,在日常項(xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常遇到此需求,下面小編給大家分享實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-06-06js實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)簡(jiǎn)單實(shí)例
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)簡(jiǎn)單實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01