js實(shí)現(xiàn)放大鏡效果的思路與代碼
本文實(shí)例為大家分享了js實(shí)現(xiàn)放大鏡效果的具體代碼,供大家參考,具體內(nèi)容如下
樣式展示:
思路
先準(zhǔn)備兩張圖片,一張小圖,一張大圖,并且兩張圖片有一個(gè)整數(shù)比值
在小圖片的上方設(shè)置一個(gè)放大鏡樣式,背景設(shè)為透明色即可
大圖片外邊套一個(gè)父元素,超出父元素隱藏,大小為只能容納你的放大部分即可
父元素與放大鏡樣式的比值=大圖與小圖的比值
在小圖片上進(jìn)行鼠標(biāo)移動(dòng)時(shí)獲取鼠標(biāo)的坐標(biāo),得到鼠標(biāo)當(dāng)前處于小圖片上的坐標(biāo)
根據(jù)對(duì)應(yīng)的比例求出大圖片的坐標(biāo)并移動(dòng)大圖片令放大部分處于父元素可見范圍
代碼
1.html部分
<div id="box"> <!-- toBig是放大鏡元素 --> <div id="toBig"></div> <!-- 小圖片 --> <img src="img/05.jpg" id="smallImg" width="800px"> </div> <div id="beBig"> <!-- 大圖片,比例為1.5倍數(shù) --> <img src="img/05.jpg" id="bigImg" width="1200px"> </div>
2.css樣式部分
*{ margin: 0px; padding: 0px; } #box{ position: relative; float: left; } #toBig{ width: 80px; height: 80px; border: 1px solid gray; background-color: transparent; position: absolute; } #beBig{ float: left; overflow: hidden; border: 1px solid gray; position: relative; left: 40px; top:325px ; } #bigImg{ position: absolute; }
3.腳本部分
<script type="text/javascript"> //獲取小圖片,大圖片,放大鏡元素,大圖片的父元素 var smallImg=document.querySelector("#smallImg"); var bigImg=document.querySelector("#bigImg"); var toBig=document.querySelector("#toBig"); var beBig=document.querySelector("#beBig"); /*在頁面加載時(shí)就先計(jì)算出小圖片與大圖片的比例*/ var q=0; window.onload=function(){ q=bigImg.offsetWidth/smallImg.offsetWidth; //根據(jù)放大鏡的寬高和比例計(jì)算要顯示放大內(nèi)容的大小 beBig.style.width = toBig.clientWidth * q +"px"; beBig.style.height = toBig.clientHeight * q +"px"; } //獲取放大鏡元素的中心,保證鼠標(biāo)在放大鏡中心 var xCenter=toBig.clientWidth/2; var yCenter=toBig.clientHeight/2; //flag是一個(gè)標(biāo)志,當(dāng)鼠標(biāo)按下時(shí)為true,可以進(jìn)行移動(dòng) flag=false; toBig.onmousedown = function(){ flag=true; } toBig.onmouseup = function(){ flag=false; } window.onmousemove=function(ev){ var ev = ev || window.event; //flag為true時(shí),放大鏡元素被按下并可以進(jìn)行拖動(dòng) if(flag){ //獲取鼠標(biāo)當(dāng)前所在位置并計(jì)算除了元素自身外要移動(dòng)的位置 var mouseX=ev.clientX,mouseY=ev.clientY; var trueX=mouseX - xCenter; //判斷放大鏡元素是否超出小圖片范圍 if(trueX < smallImg.offsetLeft){ trueX = smallImg.offsetLeft; } if(trueX > smallImg.clientWidth - toBig.offsetWidth){ trueX = smallImg.clientWidth - toBig.offsetWidth; } var trueY=mouseY - yCenter; if(trueY <= smallImg.offsetTop){ trueY = smallImg.offsetTop; } if(trueY > smallImg.clientHeight - toBig.offsetHeight){ trueY = smallImg.clientHeight - toBig.offsetHeight; } //小圖片移動(dòng) toBig.style.left = trueX + "px"; toBig.style.top = trueY + "px"; console.log(trueX,trueY); // 大圖片要移動(dòng)的位置 bigImg.style.left =-(trueX * q) + "px"; bigImg.style.top =-(trueY * q) + "px"; } } </script>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js實(shí)現(xiàn)鼠標(biāo)感應(yīng)圖片展示的方法
這篇文章主要介紹了js實(shí)現(xiàn)鼠標(biāo)感應(yīng)圖片展示的方法,實(shí)例分析了javascript鼠標(biāo)事件及樣式的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02詳解JavaScript中扁平與樹形數(shù)據(jù)的轉(zhuǎn)換
這篇文章主要為大家想介紹了JavaScript中實(shí)現(xiàn)扁平與樹形數(shù)據(jù)相互轉(zhuǎn)換的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,需要的可以參考一下2023-01-01JS如何獲取未來n天的時(shí)間(返回日期:yyyy-mm-dd,并且判斷是否是今天和星期)
開發(fā)中經(jīng)常遇到獲取時(shí)間的業(yè)務(wù),將常用的方法做個(gè)筆記記錄下,對(duì)JS如何獲取未來n天的時(shí)間相關(guān)知識(shí)感興趣的朋友一起看看吧2024-03-03js每隔兩秒輸出數(shù)組中的一項(xiàng)(實(shí)例)
下面小編就為大家?guī)硪黄猨s每隔兩秒輸出數(shù)組中的一項(xiàng)(實(shí)例)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05JavaScript實(shí)現(xiàn)左右下拉框動(dòng)態(tài)增刪示例
本篇文章主要介紹了JavaScript實(shí)現(xiàn)左右下拉框動(dòng)態(tài)增刪示例,可以對(duì)下拉框進(jìn)行刪除和增加,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-03-03uni-app彈出層uni-popup使用及修改默認(rèn)樣式的方法實(shí)例
我們?cè)谑褂胾niapp開發(fā)的時(shí)候,有時(shí)可以使用uniapp自有的樣式模板,這樣可以提高開發(fā)效率,下面這篇文章主要給大家介紹了關(guān)于uni-app彈出層uni-popup使用及修改默認(rèn)樣式的相關(guān)資料,需要的朋友可以參考下2022-11-11JavaScript獲取上傳進(jìn)度的幾種方式實(shí)現(xiàn)
進(jìn)度條的應(yīng)用是為了顯示的告訴用戶文件上傳了多少,本文主要介紹了JavaScript獲取上傳進(jìn)度的幾種方式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08JavaScript實(shí)現(xiàn)in-place思想的快速排序方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)in-place思想的快速排序方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08一個(gè)用javascript寫的select支持上下鍵、首字母篩選以及回車取值的功能
一個(gè)用javascript寫的select支持上下鍵、首字母篩選以及回車取值的功能2009-09-09