js原生淘寶京東寶貝放大鏡效果

js實現商城放大鏡效果

效果:css

  • 鼠標放上去會有半透明遮罩、右邊會有大圖片局部圖。
  • 鼠標移動時右邊的大圖片也會局部移動。

技術點html

Event
Event 是一個事件對象,當一個事件發生後,和當前事件發生相關的詳細信息被臨時存儲到一個指定的地方,也就是event對象,以方便咱們在須要的時候調用。this

事件捕獲定位code

`難點``:計算。htm

**接下來是demo分享:對象

css部分:seo

* {
        margin: 0;
        padding: 0;
    }
    /* img {
        vertical-align: top;
    } */
    
    .box {
        width: 350px;
        height: 350px;
        position: relative;
        border: 1px solid black;
        margin: 150px 0 0 300px;
    }
    
    .big {
        width: 450px;
        height: 450px;
        position: absolute;
        border: 1px solid black;
        left: 400px;
        top: 0;
        display: none;
        overflow: hidden;
    }
    
    .small {
        position: relative;
    }
    
    .mask {
        width: 100px;
        height: 100px;
        background-color: rgba(255, 255, 0, 0.4);
        position: absolute;
        left: 0;
        top: 0;
        cursor: move;
        display: none;
    }
    
    .big img {
        position: absolute;
        left: 0;
        top: 0;
    }

html結構部分:事件

<div class="box" id="oBox">
        <div class="small" id="oSmall">
            <img src="./images/001.jpg" alt="">
            <div class="mask" id="oMask"></div>
        </div>
        <div class="big" id="oBig">
            <img src="./images/0001.jpg" alt="">
        </div>
    </div>
//第一步獲取節點
    let box = document.getElementById('oBox');
    let small = box.children[0]; //獲取盒子的第一個子節點samll
    let big = box.children[1]; //獲取盒子的第二個子節點big
    let mask = small.children[1]; //獲取小盒子裏的遮罩
    let bigImg = big.children[0]; //獲取大盒子裏的圖片


    //鼠標進入small 遮罩(mask)大盒子(big)display:block
    small.onmouseover = function() {
        mask.style.display = 'block';
        big.style.display = 'block';

    };

    //鼠標離開small 遮罩(mask)大盒子(big)display:none
    small.onmouseout = function() {
        mask.style.display = 'none';
        big.style.display = 'none';
    };

    let x = 0;
    let y = 0;


    small.onmousemove = function(even) {
        var even = even || window.event;

        // 獲取鼠標在small裏的座標
        let x = even.clientX - this.offsetParent.offsetLeft - mask.offsetWidth / 2;
        let y = even.clientY - this.offsetParent.offsetTop - mask.offsetHeight / 2;


        // 限制住鼠標的座標致使遮罩的位置越界
        if (x < 0) {
            x = 0;
        } else if (x > small.offsetWidth - mask.offsetWidth) {
            x = small.offsetWidth - mask.offsetWidth;
        }

        if (y < 0) {
            y = 0;
        } else if (y > small.offsetHeight - mask.offsetHeight) {
            y = small.offsetHeight - mask.offsetHeight;
        }
        mask.style.left = x + 'px';
        mask.style.top = y + 'px';
        //注意大圖片的方向
        bigImg.style.top = -y * big.offsetHeight / small.offsetHeight + 'px';
        bigImg.style.left = -x * big.offsetWidth / small.offsetWidth + 'px';
    };
相關文章
相關標籤/搜索