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

首頁 > 編程 > JavaScript > 正文

原生javascript實現圖片放大鏡效果

2019-11-19 17:52:59
字體:
來源:轉載
供稿:網友

當我們在電商網站上購買商品時,經常會看到這樣一種效果,當我們把鼠標放到我們瀏覽的商品圖片上時,會出現類似放大鏡一樣的一定區域的放大效果,方便消費者觀察商品。今天我對這一技術,進行簡單實現,實現圖片放大鏡效果。
我在代碼中進行了代碼編寫的思路的說明和詳細的代碼注釋,方便讀者,請看代碼:

<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>   /*    第一步:當頁面加載完后,獲取所要操作的節點對象。    第二步:為smallBox添加一個鼠標浮動事件       當鼠標浮動到smallBox可視區域的時候,顯示出小黃盒子tool       和右邊的大盒子(小黃盒子的放大版)bigBox       添加active      為smallBox添加一個鼠標離開事件       隱藏小黃盒子和右邊的大盒子       去掉active    第三步:為smallBox添加一個鼠標移動事件      小黃盒子tool要跟著鼠標的坐標移動      右邊的大盒子里的圖片也跟著指定的比例移動   */   var smallBox = document.getElementById("smallBox");//小盒子   var tool = document.getElementById("tool");//小盒子中的黃色區域   var bigBox = document.getElementById("bigBox");//大盒子   var bigImg = document.getElementById("bigImg");//放大的圖片   //鼠標進入小盒子區域內,顯示黃色區域和大盒子   smallBox.onmouseenter = function(){    tool.className = "tool active";    bigBox.className = "big-box active";   }   //鼠標離開小盒子區域,不顯示黃色區域和大盒子   smallBox.onmouseleave = function(){    tool.className = "tool";    bigBox.className = "big-box";   }   //鼠標在小盒子內移動   smallBox.onmousemove = function(e){    var _e = window.event||e;//事件對象    var x = _e.clientX-this.offsetLeft-tool.offsetWidth/2;//事件對象在小盒子內的橫向偏移量    var y = _e.clientY-this.offsetTop-tool.offsetHeight/2;//豎向偏移量    if(x<0){     x = 0;//當左偏移出小盒子時,設為0    }    if(y<0){     y = 0;//當上偏移出小盒子時,設為0    }    if(x>this.offsetWidth-tool.offsetWidth){     x = this.offsetWidth-tool.offsetWidth;//當右偏移出小盒子時,設為小盒子的寬度-黃色放大區域寬度    }    if(y>this.offsetHeight-tool.offsetHeight){     y = this.offsetHeight-tool.offsetHeight;//當下偏移出小盒子時,設為小盒子的高度-黃色放大區域高度    }    tool.style.left = x + "px";//黃色放大區域距離小盒子左偏距    tool.style.top = y + "px";//黃色放大區域距離小盒子上偏距    bigImg.style.left = -x*2 + "px";//放大圖片移動方向相反,偏移距離加倍    bigImg.style.top = -y*2 + "px";   }  </script> </body></html>

這里,我并沒有對代碼中css樣式,JavaScript行為進行和html結構的分離,方便讀者閱讀和運行。

有讀者可能考慮,獲取事件對象的偏移距離時直接使用offsetX和offsetY屬性,省去了計算,但是筆者在試驗時,出現了異常,黃色放大區域并不能穩定的隨著鼠標進行移動,筆者認為,當時用offsetX和offsetY時,執行onmousemove會不斷地出發onmouseover,而onmouseover會產生事件傳播,從而導致在獲取offsetX時出現異常。最終,筆者采用上述代碼中的方法,能夠出現穩定的效果。讀者可以自行運行代碼,查看效果。這里附上筆者的效果圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古浪县| 兴化市| 重庆市| 遂溪县| 安新县| 平塘县| 商城县| 维西| 色达县| 郎溪县| 巴南区| 眉山市| 彭阳县| 贞丰县| 通城县| 无棣县| 吴川市| 邓州市| 永兴县| 阿拉善右旗| 清河县| 宜州市| 盐山县| 安徽省| 葫芦岛市| 托里县| 平山县| 乐清市| 内黄县| 郴州市| 海丰县| 加查县| 昭平县| 伊金霍洛旗| 赣州市| 凤翔县| 明星| 鸡西市| 涡阳县| 龙南县| 睢宁县|