最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生javascript實(shí)現(xiàn)圖片放大鏡效果

 更新時(shí)間:2017年01月18日 13:55:49   作者:依然仰望  
這篇文章主要為大家詳細(xì)介紹了原生javascript實(shí)現(xiàn)圖片放大鏡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

當(dāng)我們?cè)陔娚叹W(wǎng)站上購買商品時(shí),經(jīng)常會(huì)看到這樣一種效果,當(dāng)我們把鼠標(biāo)放到我們?yōu)g覽的商品圖片上時(shí),會(huì)出現(xiàn)類似放大鏡一樣的一定區(qū)域的放大效果,方便消費(fèi)者觀察商品。今天我對(duì)這一技術(shù),進(jìn)行簡單實(shí)現(xiàn),實(shí)現(xiàn)圖片放大鏡效果。
我在代碼中進(jìn)行了代碼編寫的思路的說明和詳細(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)頁面加載完后,獲取所要操作的節(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)離開事件
       隱藏小黃盒子和右邊的大盒子
       去掉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)離開小盒子區(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>

這里,我并沒有對(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)行代碼,查看效果。這里附上筆者的效果圖:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Bootstrap 3.x打印預(yù)覽背景色與文字顯示異常的解決

    Bootstrap 3.x打印預(yù)覽背景色與文字顯示異常的解決

    前幾天同事有個(gè)問題咨詢我,他在調(diào)用print()來打印頁面,發(fā)現(xiàn)打印預(yù)覽頁面上的背景色無法顯示以及文字總是顯示為黑色,感覺非常奇怪,我通過測(cè)試發(fā)現(xiàn)是Bootstrap的問題,現(xiàn)在將解決的方法分享給大家,希望可以幫助到同樣遇到這個(gè)問題的朋友們,下面來一起看看。
    2016-11-11
  • Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了Avalonjs雙向數(shù)據(jù)綁定與監(jiān)聽的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-06-06
  • JavaScript正則表達(dá)式匹配 div  style標(biāo)簽

    JavaScript正則表達(dá)式匹配 div style標(biāo)簽

    這篇文章主要介紹了JavaScript正則表達(dá)式匹配<div><style>標(biāo)簽 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 淺談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題

    淺談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題

    下面小編就為大家?guī)硪黄獪\談js基礎(chǔ)數(shù)據(jù)類型和引用類型,深淺拷貝問題,以及內(nèi)存分配問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Javascript的異步函數(shù)和Promise對(duì)象你了解嗎

    Javascript的異步函數(shù)和Promise對(duì)象你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Javascript異步函數(shù)和Promise對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaScript判斷表單為空及獲取焦點(diǎn)的方法

    JavaScript判斷表單為空及獲取焦點(diǎn)的方法

    這篇文章主要介紹了JavaScript判斷表單為空及獲取焦點(diǎn)的方法,可實(shí)現(xiàn)表單提交時(shí)判斷表單是否為空及獲取響應(yīng)焦點(diǎn)的功能,非常簡單實(shí)用,需要的朋友可以參考下
    2016-02-02
  • 解析javascript 實(shí)用函數(shù)的使用詳解

    解析javascript 實(shí)用函數(shù)的使用詳解

    本篇文章對(duì)javascript中的一些實(shí)用函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • JavaScript狀態(tài)模式及適配器模式使用講解

    JavaScript狀態(tài)模式及適配器模式使用講解

    這篇文章主要介紹了理解JavaScript中的狀態(tài)模式及適配器模式,適配器模式即Adapter Pattern,是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-12-12
  • 微信小程序云函數(shù)添加數(shù)據(jù)到數(shù)據(jù)庫的方法

    微信小程序云函數(shù)添加數(shù)據(jù)到數(shù)據(jù)庫的方法

    這篇文章主要介紹了微信小程序云函數(shù)添加數(shù)據(jù)到數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • uni-app中renderjs使用的方式淺析

    uni-app中renderjs使用的方式淺析

    renderjs是一個(gè)運(yùn)行在視圖層的js,它只支持app-vue和h5,下面這篇文章主要給大家介紹了關(guān)于uni-app中renderjs使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評(píng)論

桂阳县| 祁门县| 嘉定区| 新竹市| 遂昌县| 黄山市| 呼和浩特市| 广平县| 沙田区| 乡城县| 临邑县| 六枝特区| 延吉市| 林甸县| 丰县| 海城市| 禄丰县| 平和县| 马公市| 辽阳市| 甘洛县| 炉霍县| 大埔县| 孟州市| 剑阁县| 紫阳县| 汶川县| 通山县| 思茅市| 老河口市| 柳州市| 商城县| 黄浦区| 肥乡县| 靖西县| 桂林市| 原平市| 合川市| 东宁县| 扎鲁特旗| 太保市|