电商网站商品放大效果

电商网站放大镜效果

HTML

    <div class="box" id="box">
        <div class="small">
            <img src="img/01.jpg" width="350" alt="" />
            <div class="mask"></div>
            <ul>
                <li class="bd"><img src="img/01.jpg" alt=""></li>
                <li><img src="img/02.jpg" alt=""></li>
                <li><img src="img/03.jpg" alt=""></li>
                <li><img src="img/04.jpg" alt=""></li>
                <li><img src="img/05.jfif" alt=""></li>
            </ul>
        </div>
        <div class="big">
            <img src="img/01.jpg" alt="" />
        </div>
    </div>

CSS

        * {
    
    
            margin: 0;
            padding: 0;
        }
        .box {
    
    
            width: 350px;
            height: 350px;
            margin: 100px;
            border: 1px solid #ccc;
            position: relative;
        }
        .big {
    
    
            width: 400px;
            height: 400px;
            position: absolute;
            top: 0;
            left: 360px;
            border: 1px solid #ccc;
            overflow: hidden;
            display: none;
        }
        .big img {
    
    
            position: absolute;
            width: 800px;
        }
        .mask {
    
    
            width: 175px;
            height: 175px;
            background: rgba(255, 255, 0, 0.4);
            position: absolute;
            top: 0px;
            left: 0px;
            cursor: move;
            display: none;
        }
        .small {
    
    
            position: relative;
        }
		        ul li {
    
    
            list-style: none;
            float: left;
            width: 50px;
            height: 50px;
            margin-right: 10px;
            box-sizing: border-box;
            border: 2px solid #000;
            overflow: hidden;
            border: 2px solid transparent;
            cursor: pointer;
        }

        ul li img {
    
    
            width: 50px;
            height: 50px;
        }

        .bd {
    
    
            border: 2px solid yellow;
        }

JS

        // 获取元素
        var box = document.getElementById("box")
        var small = box.children[0]
        var mask = small.children[1]
        var big = box.children[1]
        var big_img = big.children[0]
        // console.log(small, mask, big);
        
        var ul = document.getElementsByTagName('ul')[0]
        var lis = ul.children
        // console.log(lis);
        for (var i = 0; i < lis.length; i++) {
    
    
            lis[i].onmouseover = function () {
    
    
                for (let i = 0; i < lis.length; i++) {
    
    
                    lis[i].className = ""
                }
                this.className = 'bd'
                // console.log(this.children[0].getAttribute("src"));
                s_img.src = this.children[0].getAttribute("src")
                big_img.src = this.children[0].getAttribute("src")
            }
        }
        
        // 鼠标经过small时显示mask框和右边大盒子
        small.onmouseover = function () {
    
    
            mask.style.display = 'block'
            big.style.display = 'block'
        }
        // 鼠标离开时隐藏mask框和右边大盒子
        box.onmouseout = function () {
    
    
            mask.style.display = 'none'
            big.style.display = 'none'
        }
        // 鼠标在box上移动时,跟着动
        box.onmousemove = function (e) {
    
    
            // 盒子距离box边框的距离(即mask的定位属性left和top的值)
            maskX = e.pageX - 100 - mask.offsetWidth / 2
            maskY = e.pageY - 100 - mask.offsetWidth / 2
            // 限制  让mask不能超出small框 左边和上边
            maskX = maskX < 0 ? 0 : maskX
            maskY = maskY < 0 ? 0 : maskY
            // 限制  让mask不能超出small框 右边和下边
            maskX = maskX > small.offsetWidth - mask.offsetWidth ? small.offsetWidth - mask.offsetWidth : maskX
            maskY = maskY > box.offsetHeight - mask.offsetHeight ? box.offsetHeight - mask.offsetHeight :
                maskY
            // mask跟着鼠标移动移动
            mask.style.left = maskX + 'px'
            mask.style.top = maskY + 'px'
            // 让右侧大盒子的图片按比例移动
            big_img.style.left = -maskX * 800 / 350 + 'px'
            big_img.style.top = -maskY * 800 / 350 + 'px'
        }

效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37825174/article/details/111059676