小王学习日记 2023-03-20 22:21 采纳率: 100%
浏览 12
已结题

如何用js实现放大镜效果

如图所示

img


代码如下:


    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #smlImg {
            width: 300px;
            height: 300px;
            /* position: relative; */
            /* float: left; */
            background-image: url(../img/2.jpg);
            background-size: cover;
        }

        #smlDiv{
            width: 100px;
            height: 100px;
            /* background-color: rgba(rgb(180, 175, 175), rgb(180, 175, 175), rgb(180, 175, 175), 0.5); */
            background-color:rgba(212, 234, 123, 0.2);
            display: none;
            position: absolute;
        }
        #bigDiv{
            width: 300px;
            height: 300px;
            position: absolute;
            left: 300px;
            top: 0px;
            overflow: hidden;
            display: none;
        }
        #bigImg{
            width: 900px;
            height: 900px;
            position: absolute;
        }
    </style>
</head>

<body>
    <div class="Box">
        <div id="smlImg">
            
            <div id="smlDiv" ></div>
        </div>
        <div id="bigDiv">
            <img src="../img/2.jpg" alt="" id="bigImg">
        </div>
    </div>
    <script>
        // 鼠标移入,出现小Div和大div
        var smlImg= document.getElementById('smlImg')
        var smlDiv=document.getElementById('smlDiv')
        var bigDiv=document.getElementById('bigDiv')
        smlImg.onmouseover=function(){
            smlDiv.style.display='block'
            bigDiv.style.display='block'
        }
        // 鼠标移出,隐藏小div.大div
        smlImg.onmouseout=function(){
            smlDiv.style.display='none'
            bigDiv.style.display='none'
        }
        // 小div随着鼠标移动绑定事件
        smlDiv.onmousemove=function(eve){
            var eve=eve||window.event
            // console.log(eve)
            // console.log(eve.clientX,eve.clientY)
            var x=eve.clientX-50;
            var y=eve.clientY-50
            // 对移动范围进行判断
            if(x>=200){
                x=200
            }
            if(y>=200){
                y=200
            }
            if(x<=0){
                x=0
            }
            if(y<=0){
                y=0
            }
            smlDiv.style.left=x+'px'
            smlDiv.style.top=y+'px'
            // 大图移动和小图相反
            bigImg.style.left=-3*x+'px'
            bigImg.style.top=-3*y+'px'
        }
    </script>
</body>

</html>

其中,需要注意的是移动的大小计算问题,需要细心一点

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-03-20 23:30
    关注

    那么你的问题是什么呢?如果是技术分享,那么写在blog比较好。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 Ubuntu不小心注销了要怎么恢复啊
  • ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令
  • ¥15 关于mpi的问题:请问遇到这种情况需要怎么解决,出现这个问题后电脑不能进行mpi多核运行只能进行单核运行
  • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号