原生JS实现放大镜效果

18 篇文章 2 订阅
12 篇文章 0 订阅

效果:

在这里插入图片描述

源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 600px;
            height: 400px;
            background-image: url(./image/b4.jpg);
            background-size: 600px 400px;
            position: relative;
        }
        #mirror{
            width: 150px;
            height: 150px;
            background-color: pink;
            position: absolute;
            left: 100px;
            top: 100px;
            opacity: 0.3;
        }
        #show{
            width: 300px;
            height: 300px;
            border: 1px solid black;
            position: absolute;
            left: 620px;
            top: 0;
            background-image: url(./image/b4.jpg);
            background-size: 1200px 800px;
            background-position: -100px -100px;
        }
    </style>
</head>
<body>
    <div id="box">
        <div id="mirror"></div>
        <div id="show"></div>
    </div>

    <script>
        //获取dom元素
        let oBox = document.getElementById('box');
        let oMirror = document.getElementById('mirror');
        let oShow = document.getElementById('show');

        let boxOffsetLeft = oBox.offsetLeft;  //获取box距离页面左边的距离
        let boxOffsetTop = oBox.offsetTop;  //获取box距离页面上边的距离
        let mirrorWidth = oMirror.offsetWidth;   //获取放大镜的宽度 
        let mirrorHeight = oMirror.offsetHeight;   //获取放大镜的高度

        //给box绑定onmousemove事件,在鼠标移动时,让放大镜跟着鼠标走
        oBox.onmousemove = function(event){
            let e = event || window.event;   //获取事件对象

            // 一、数据处理
            //1.计算放大镜应该出现的位置
            //鼠标距离页面的距离-box距离页面的距离-放大镜的宽高一半
            let left1 = e.pageX - boxOffsetLeft - mirrorWidth/2;
            let top1 = e.pageY - boxOffsetTop - mirrorHeight/2;
            //2.边界处理
            if(left1<0){  //左边界
                left1 = 0;
            }else if(left1+mirrorWidth>600){  //右边界
                left1 = 600 - mirrorWidth;
            }

            if(top1<0){
                top1 = 0;  //上边界
            }else if(top1+mirrorHeight>400){   //下边界
                top1 = 400 - mirrorHeight;
            }

            // 二、外观呈现
            //1.移动放大镜(移动鼠标)
            oMirror.style.left = left1 + "px";
            oMirror.style.top = top1 + "px";
            //2.呈现放大的区域(改变show的背景图位置)
            oShow.style.backgroundPosition = `-${left1*2}px -${top1*2}px`;
        }
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值