1. 程式人生 > >JavaScript之圖片操作5

JavaScript之圖片操作5

移動 asc scrip left device 詳細介紹 div com mage

本次的圖片操作是要實現模仿天貓淘寶的放大鏡效果,如下圖所示:

技術分享圖片

其實現原理其實很簡單,主要就是定位的運用,在上面的圖中,左邊是一個div,它的大小就是左邊圖片的大小,我們稱為左窗口(原圖),紅色部分我們稱為放大鏡,右邊也是一個div,我們稱為右窗口,在右窗口中有一個大圖,要實現放大效果,就需要保證原圖/放大鏡 = 大圖 / 右窗口 = 放大倍率。當鼠標在左圖中移動時,讓放大鏡跟隨鼠標一起移動,然後大圖在又窗口中同步運動,這樣就可以模擬放大效果了。

首先是基本的結果:

<body>
        <div id="box">
           <img src="img/small.jpg"
/> <div id="small"></div> </div> <div id="big"> <img src="img/big.jpg" id="imgs"/> </div> </body>

然後是基本樣式:

html,body {
    margin: 0;
    padding:0;
  }
  /* 小圖 */
  #box{
    width: 310px;
    height: 310px;
    position: relative;
    float:left;
  }
  #box img{
    width:100%;
    height:100%;
  }
  /* 紅色方塊 */
  #box #small{
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    left: 0;
    background: red;
    opacity: 0.6;
    display: none;
  }
/* 放大圖的盒子 */
  #big{
    width: 310px;
    height: 310px;
    overflow: hidden;
    position: relative;
    display: none;
    float:left;
  }
  /* 大圖 */
  #big img{
    width: 930px;  
    height: 930px;  
    position: absolute;
  }

這裏為了簡單操作,我們將右窗口設置成和原圖也就是左窗口同樣大小。

通過上面我們知道,大圖是右窗口的3倍,所以是放大了3倍,而且放大鏡是原圖的三分之一。

接下來需要設置在鼠標沒有懸浮在左窗口時,放大鏡、右窗口和原圖是不可見的,只有當鼠標懸浮在左窗口之上時,放大鏡、右窗口和原圖是可見的。

box.onmouseenter = function(e){
  big.style.display=‘block‘;
  small.style.display=‘block‘;
}

box.onmouseleave = function(e){
  big.style.display=‘none‘;
  small.style.display=‘none‘;
}

最後就是監聽鼠標事件,實現放大效果了。

box.onmousemove = function(e){
  //獲取鼠標的x、y坐標。為了讓鼠標剛好在small紅色小方塊的中心,所以需要減去50
  var top = e.clientY-50;
  var left = e.clientX-50;
  //限制small小方塊移出box的範圍
  if(top > 200){top = 200};
  if(top < 0){top = 0};
  if(left > 200){left = 200};
  if(left < 0){left = 0};
//動態設置small小方塊的位置,讓小方塊跟隨鼠標移動
  small.style.left = left + ‘px‘;
  small.style.top = top + ‘px‘;
  //讓big裏面的圖片跟隨鼠標的移動而移動。這裏為什麽要乘以(-3)呢?因為big裏面的大圖是box的3倍。鼠標在box上面向右移動1px,那麽big裏面的大圖就要向左移動(1 x -3)px才能達到我們想要的效果。
  img.style.top = top*(-3) + ‘px‘;
  img.style.left = left*(-3) + ‘px‘;
}

這樣,就可以實現放大鏡效果了。

詳細代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
        <div id="box">
                <img src="img/small.jpg"/>
                <div id="small"></div>
             </div>
             <div id="big">
               <img src="img/big.jpg" id="imgs"/>
             </div>
</body>
<script>
var box = document.querySelector(#box);
var small = document.querySelector(#small);
var big = document.querySelector(#big);
var img = document.querySelector(#imgs);
box.onmousemove = function(e){
  var top = e.clientY-50;
  var left = e.clientX-50;
  if(top > 200){top = 200};
  if(top < 0){top = 0};
  if(left > 200){left = 200};
  if(left < 0){left = 0};
  small.style.left = left + px;
  small.style.top = top + px;
  img.style.top = top*(-3) + px;
  img.style.left = left*(-3) + px;
}
box.onmouseenter = function(e){
  big.style.display=block;
  small.style.display=block;
}
box.onmouseleave = function(e){
  big.style.display=none;
  small.style.display=none;
}
</script>
</html>

jQuery也可以實現上面的效果,原理是一樣,基於鼠標事件和定位,這裏就不再詳細介紹了,會在代碼下載鏈接中給出詳細完整的代碼。

完整代碼下載:點這裏

JavaScript之圖片操作5