zoukankan      html  css  js  c++  java
  • js原生淘宝京东宝贝放大镜效果

    js实现商城放大镜效果

    效果:

    • 鼠标放上去会有半透明遮罩、右边会有大图片局部图。
    • 鼠标移动时右边的大图片也会局部移动。

    技术点

    Event
    Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息被临时存储到一个指定的地方,也就是event对象,以方便我们在需要的时候调用。

    事件捕获定位

    `难点``:计算。

    **接下来是demo分享:

    css部分:

     * {
            margin: 0;
            padding: 0;
        }
        /* img {
            vertical-align: top;
        } */
        
        .box {
             350px;
            height: 350px;
            position: relative;
            border: 1px solid black;
            margin: 150px 0 0 300px;
        }
        
        .big {
             450px;
            height: 450px;
            position: absolute;
            border: 1px solid black;
            left: 400px;
            top: 0;
            display: none;
            overflow: hidden;
        }
        
        .small {
            position: relative;
        }
        
        .mask {
             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';
        };
    
  • 相关阅读:
    git修改文件名大小写的方法。
    VC中常用的宏
    spring cloud Zuul 多层拦截 --- 心得
    Zuul网关 @EnableZuulProxy 和 @EnableZuulServer 的区别
    jave 数据类型 float 的 正确赋值
    spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】
    RabbitMQ 消息中间件 的下载与安装【window10】
    spring cloud --- 使用 actuator 热更新【刷新】单机配置文件
    spring cloud 与spring boot的版本对应总结
    spring cloud feign 报错 feign.FeignException$MethodNotAllowed: status 405 reading 解决
  • 原文地址:https://www.cnblogs.com/wangqingjiu/p/10932917.html
Copyright © 2011-2022 走看看