国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

js實現圖片局部放大效果詳解

2024-05-06 16:49:12
字體:
來源:轉載
供稿:網友

圖片局部放大效果結合的知識點主要是DOM的操作,以及事件的應用,所以首先要對DOM的操作有一定了解,其次能對事件的應用有一定的累積。

js,圖片,局部放大

如上圖,可以看到,這是放大鏡的基本效果,主要分成左右兩個部分。左邊分成一張大圖,和一個導航欄,在右邊則是一個放大鏡放大后的圖片。因此,我在畫頁面的時候,大體的HTMl結構如下:

<body>  <div class="choose">    <div class="content">      <img src="images/small1.jpg" id = "small">      <div class="shadow"></div>    </div>    <ul id = "listshow">      <li class="selected">        <img src="images/small1.jpg" data-img = "images/big1.jpg"      </li>      <li>        <img src="images/small2.jpg" data-img = "images/big2.jpg"      </li>      <li>        <img src="images/small3.jpg" data-img = "images/big3.jpg"      </li>      <li>        <img src="images/small4.jpg" data-img = "images/big4.jpg"      </li>    </ul>  </div>  <div class="larger">    <img src="images/big1.jpg" id = "big">  </div></body>

在這個時候,將靜態頁面按常規方式進行布局,給予css樣式如下:

<style>    *{      padding: 0;      margin: 0;      list-style: none;    }    .choose{      width: 400px;      height: 600px;      float: left;      margin:50px 0 0 50px;    }    .content{      width: 400px;      height: 400px;      position: relative;    }    .content img {      width: 400px;      height: 400px;    }    #listshow{      width: 400px;      height: 100px;      margin-top: 20px;    }    #listshow li{      width: 98px;      height: 100px;      float: left;      border:1px solid #666;    }    #listshow li img{      width: 98px;      height: 100px;    }    #listshow .selected{      border-color: brown;    }    .larger{      width: 400px;      height: 400px;      position: absolute;      top: 50px;      left: 500px;      float: left;      overflow: hidden;      display: none;    }    #big{      width: 800px;      height: 800px;      position: absolute;      left: 0;      top: 0;    }    .shadow{      width: 200px;      height: 200px;      background-color: rgba(145,200,200,.4);      position: absolute;      left: 0;      top: 0;      z-index: 10;      display: none;    }  </style>

那么這個時候,開始寫js樣式,分布書寫的話,第一步要考慮到左邊的選項卡。選項卡我采用直接使用src賦值的方法,將滑過的圖片對應的src給大圖,代碼呈現:

for(var i = 0;i<showli.length;i++){    var showitem = showli[i];    showitem.onmouseover =showitem.onclick = function(e){      let evt = window.event||e;      for(var j =0;j<showli.length;j++){        showli[j].className = "";      }      var showimg = this.getElementsByTagName("img")[0];      var imgsrc = showimg.src;      small.src = imgsrc;      var bigsrc = showimg.getAttribute("data-img");      big.src = bigsrc;      this.className = "selected";    }  }

這樣就可以成功實現選項卡功能,比較簡單粗暴的一種方式,當然,大家使用selected結合點擊下標和大圖下標相等的這一點,也一樣可以做出來。

接下來要考慮到,鼠標在大圖上移動時,遮罩層的移動效果。值得一提的時候,這個地方其實存在一個視覺上的誤區,看起來是在滑動遮罩層,其實是鼠標的滑動,而遮罩層通過獲取鼠標的clientX,clientY來確定自己的位置,遮罩層位置獲取代碼:

content.onmousemove = function (e) {    var evt = window.event||e;    larger.style.display = "block";    shadow.style.display = "block";    var clientX = evt.clientX;    var clientY = evt.clientY;    var scrollLeft = document.documentElement.scrollLeft||document.body.scrollLeft;    var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;    var X = clientX+scrollLeft-chooseMarginL-shadowW/2;    var Y = clientY+scrollTop-chooseMarginT-shadowH/2;    if(X<=0){      X = 0;    }    if(X>=maxX){      X = maxX;    }    if(Y<=0){      Y = 0;    }    if(Y>=maxY){      Y = maxY;    }//    防止遮罩層粘滯,跟隨鼠標一起滑出大圖位置    var bigX = X*bigW/contentW;    var bigY = Y*bigH/contentH;// bigX / bigW = X / contentW,主圖和遮罩層之間存在兩倍關系,放大圖和原圖之間也有兩倍關系    shadow.style.left = X+"px";    shadow.style.top = Y+"px";    big.style.left = -bigX+"px";    big.style.top = -bigY+"px";  }

在這里,計算較多,尤其要注意遮罩層陰影,主圖以及放大圖之間的倍數關系。

到這里,基本功能就實現了,這里面涉及的計算可以適當配圖理解,尤其注意點擊位置的獲取。

以上所述是小編給大家介紹的js實現圖片局部放大效果詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东丽区| 余庆县| 宁河县| 新乐市| 安平县| 黑河市| 永宁县| 邢台市| 临沧市| 永新县| 邻水| 仙桃市| 康马县| 虎林市| 许昌市| 郓城县| 汕头市| 肇东市| 大姚县| 彭阳县| 绥中县| 开封县| 龙岩市| 新巴尔虎右旗| 七台河市| 会宁县| 寻乌县| 临桂县| 琼海市| 休宁县| 古丈县| 江川县| 星子县| 容城县| 安平县| 夏津县| 鄱阳县| 靖安县| 陆良县| 万荣县| 连云港市|