<video id="nbppf"></video>
<video id="nbppf"><dl id="nbppf"><delect id="nbppf"></delect></dl></video>
<dl id="nbppf"></dl>
<dl id="nbppf"><delect id="nbppf"></delect></dl><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<video id="nbppf"></video>
<dl id="nbppf"></dl><dl id="nbppf"></dl><address id="nbppf"><video id="nbppf"></video></address>
<dl id="nbppf"></dl>
<output id="nbppf"></output>
<output id="nbppf"><delect id="nbppf"></delect></output><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<dl id="nbppf"></dl><dl id="nbppf"></dl>
<dl id="nbppf"></dl>
<video id="nbppf"></video>
<dl id="nbppf"></dl><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<video id="nbppf"><output id="nbppf"><font id="nbppf"></font></output></video>
<output id="nbppf"><font id="nbppf"></font></output>

js 實現圖片放大鏡效果

發布時間:2021-03-24 20:06 作者:獨孤劍 閱讀:1678

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

<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="image001.jpg" />
        <div class="tool" id="tool"></div>
    </div>
    <div class="big-box" id="bigBox">
        <img src="image001.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時出現異常。最終,筆者采用上述代碼中的方法,能夠出現穩定的效果。讀者可以自行運行代碼,查看效果。這里附上筆者的效果圖:

微信打賞, 微信掃一掃

支付寶打賞, 支付寶掃一掃

如果文章對您有幫助,歡迎給作者打賞

作者最新文章
開發過程中解決360兼容模式瀏覽器的方法
云南象群向西南方向遷移,云南離群獨象距離象群約12公里
吉林做網站最低價格,吉林企業網站建設價格低至500元起
守象人直擊云南象群最新動向
網站影響百度蜘蛛抓取量的因素有哪些?為什么我的網站Baidu蜘蛛來的次數少?
企業名片
在線客服
天天干天天在线观看_国产精品无码天堂2021_日韩特黄美女自慰大全_欧美老妇乱色老头与老妇
<video id="nbppf"></video>
<video id="nbppf"><dl id="nbppf"><delect id="nbppf"></delect></dl></video>
<dl id="nbppf"></dl>
<dl id="nbppf"><delect id="nbppf"></delect></dl><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<video id="nbppf"></video>
<dl id="nbppf"></dl><dl id="nbppf"></dl><address id="nbppf"><video id="nbppf"></video></address>
<dl id="nbppf"></dl>
<output id="nbppf"></output>
<output id="nbppf"><delect id="nbppf"></delect></output><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<dl id="nbppf"></dl><dl id="nbppf"></dl>
<dl id="nbppf"></dl>
<video id="nbppf"></video>
<dl id="nbppf"></dl><dl id="nbppf"><delect id="nbppf"><meter id="nbppf"></meter></delect></dl>
<video id="nbppf"><output id="nbppf"><font id="nbppf"></font></output></video>
<output id="nbppf"><font id="nbppf"></font></output>