JavaScript实现放大镜效果

问题描述:利用JavaScript知识实现鼠标在左侧照片上移动,右侧盒子内出现放大版的对应位置效果图。

详细代码:

javascript 复制代码
<!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;
            list-style: none;
            box-sizing: border-box;
        }

        .box {
            width: 1250px;
            height: 700px;
            background-color: cadetblue;
            margin: 50px auto;
            padding-top: 30px;
        }

        .box_left {
            width: 400px;
            height: 400px;
            border: 1px solid #666;

        }

        .box_left .pic_box {
            width: 400px;
            height: 400px;
            position: relative;

        }

        .box_left .pic_box .pic {
            width: 100%;
            height: 100%;
        }

        .box_left .pic_box .pic img {
            width: 100%;
            height: 100%;
        }

        .box_left .pic_box .big_box {
            width: 500px;
            height: 500px;
            overflow: hidden;
            border: 1px solid #666;
            position: absolute;
            left: 450px;
            top: 0px;
        }

        .box_left .pic_box .big_box img {
            width: 800px;
            position: absolute;
            left: 0px;
            top: 0px;
        }

        .mask {
            width: 300px;
            height: 300px;
            background-color: bisque;
            opacity: 0.7;
            position: absolute;
            left: 0;
            top: 0px;
        }
    </style>
</head>

<body>
    <div class="box">
        <!-- 左侧放大镜 -->
        <div class="box_left">
            <div class="pic_box">
                <div class="pic">
                    <img src="./5.jpg" alt="">
                    <div class="mask"></div>

                </div>
                <div class="big_box">
                    <img src="./5.jpg" alt="">
                </div>
            </div>
            <!-- <ol>
                <li></li>
            </ol> -->

        </div>
        <!-- 右侧产品购买的信息 -->
        <div class="box_right"></div>
    </div>
    <script>
        var pic_box = document.querySelector('.pic_box');
        var mask = document.querySelector('.mask');
        var pic = document.querySelector('.pic');
        var big_box = document.querySelector('.big_box');
        var big_pic = document.querySelector('.big_box img');
        pic.onmouseenter = function () {
            mask.style.display = 'block';
            big_box.style.display = 'block';
        }
        pic.onmouseleave = function () {
            mask.style.display = 'none';
            big_box.style.display = 'none';
        }
        pic.onmousemove=function(e){
            e=e||window.event;
            // 鼠标在盒子内的坐标
            var x=e.pageX-pic_box.offsetLeft;
            var y=e.pageY-pic_box.offsetTop;
            console.log(x,y);
            var maskx=pic.offsetWidth-mask.offsetWidth;
            var masky=pic.offsetHeight-mask.offsetHeight;
            x=x-mask.offsetWidth*0.5;
            y=y-mask.offsetHeight*0.5;
            if(x<=0){
                x=0;

            }else if(x>maskx){
                x=maskx;
            }
            if(y<=0){
                y=0;

            }else if(y>=masky){
                y=masky;
            }
            mask.style.left=x+'px';
            mask.style.top=y+'px';
            var picmaxX=big_box.offsetWidth-big_pic.offsetWidth;
            big_pic.style.left=picmaxX*x/maskx+'px';
            big_pic.style.top=picmaxX*y/masky+'px';

        } 
    </script>
</body>

</html>

效果图:

相关推荐
Liu.7746 分钟前
vue3组件之间传输数据
前端·javascript·vue.js
|晴 天|7 分钟前
前端闭包:从概念到实战,解锁JavaScript高级技能
开发语言·前端·javascript
开发者小天8 分钟前
react的拖拽组件库dnd-kit
前端·react.js·前端框架
用户44455436542617 分钟前
在Android开发中阅读源码的指导思路
前端
用户542778485154020 分钟前
ESM 模块(ECMAScript Module)详解
前端
全栈前端老曹35 分钟前
【ReactNative】核心组件与 JSX 语法
前端·javascript·react native·react.js·跨平台·jsx·移动端开发
用户542778485154042 分钟前
JavaScript 闭包详解:由浅入深掌握作用域与内存管理的艺术
前端
小小黑00743 分钟前
快手小程序-实现插屏广告的功能
前端·javascript·小程序
用户542778485154043 分钟前
闭包在 Vue 项目中的应用
前端
TG:@yunlaoda360 云老大1 小时前
配置华为云国际站代理商OBS跨区域复制时,如何编辑委托信任策略?
java·前端·华为云