仿京东放大镜效果

仿京东放大镜效果

这是一个简单的图片放大镜效果的网页代码。通过鼠标移动,可以在父容器内显示一个遮挡层和一个放大的图片区域,实现了图片放大和鼠标跟随效果。

该页面使用了HTML、CSS和JavaScript来实现。其中,HTML部分定义了一个父容器(class=“father”)和两个子元素(class="mask"和class=“big_mask”),通过CSS来设置它们的样式。JavaScript部分则负责监听鼠标事件,并计算遮挡层和放大图片的位置,实现图片放大和鼠标跟随效果。

需要注意的是,该代码中引用了两个图片文件(“flame-girl1.jpg”),你需要将这两个图片文件放在合适的路径下,并在代码中正确引用。同时,如果需要修改图片大小或其他样式,请在CSS部分进行相应的调整。

<!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>
        .father {
            width: 400px;
            height: 400px;
            /* border: 2px solid grey; */
            text-align: center;
            position: relative;
        }

        .father img {
            width: 400px;
            height: 400px;
            /* margin-top: 50px; */
        }
        .mask {
            width: 300px;
            height: 300px;
            background-color: #FEDE4F;
            position: absolute;
            top: 0;
            left: 0;
            opacity: .5;
            border: 1px solid #ccc;
            cursor: move;
            display: none;
            cursor: move;
        }

        .big_mask {
            width: 500px;
            height: 500px;
            position: absolute;
            left: 450px;
            top: 0;
            background-color: pink;
            /* background-image: url(./images/flame-girl1.jpg);
            background-size: contain;
            background-repeat: no-repeat;
            display: none; */
            display: none;
            overflow: hidden;
            z-index: 999;
        }

        .big_mask img {
            height: 700px;
            width: 700px;
            margin-top: 0;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div class="father">
        <img src="./images/flame-girl1.jpg" alt="" class="bigImage">
        <div class="mask"></div>
        <div class="big_mask">
            <img src="./images/flame-girl1.jpg" alt="" class="most">
        </div>
    </div>
    <script>
        window.addEventListener('load', function () {
            var mask = document.querySelector('.mask')
            var bigMask = document.querySelector('.big_mask')
            var bigImg = document.querySelector('.father')
            bigImg.addEventListener('mouseover', function () {
                mask.style.display = 'block'
                bigMask.style.display = 'block'
            })
            bigImg.addEventListener('mouseout', function () {
                mask.style.display = 'none'
                bigMask.style.display = 'none'
            })
            // 鼠标移动的时候,让黄色的盒子跟着鼠标来走
            bigImg.addEventListener('mousemove', function (e) {
                //先计算出鼠标在盒子内的坐标

                var x = e.pageX - this.offsetLeft
                var y = e.pageY - this.offsetTop
                //console.log(x,y)
                //减去盒子高度的一半
                var maskX = x - mask.offsetWidth / 2
                var maskY = y - mask.offsetHeight / 2

                //如果x坐标小于0,将其赋值为0
                //如果y坐标小于0,将其赋值为0
                var maskMax = bigImg.offsetHeight - mask.offsetHeight
                if (maskX <= 0) {
                    maskX = 0
                }
                else if (maskX >= maskMax) {
                    maskX = maskMax
                }

                if (maskY <= 0) {
                    maskY = 0
                } else if (maskY >= maskMax) {
                    maskY = maskMax
                }
                mask.style.left = maskX + 'px'
                mask.style.top = maskY + 'px'
                //大图片的移动距离=遮挡层距离*大图片最大距离/遮挡层的最大移动距离
                //大图片最大移动距离
                var most = document.querySelector('.most')
                var bigMax = most.offsetWidth - bigMask.offsetWidth
                //大图片的移动距离X Y
                var bigX = maskX * bigMax / maskMax
                var bigY = maskY * bigMax / maskMax
                most.style.left = -bigX + 'px'
                most.style.top = -bigY + 'px'
            })
        })
    </script>
</body>
</html>

上述代码通过添加事件监听器来实现对父容器(class=“father”)的鼠标移入、移出和移动事件的处理。具体解释如下:

  1. window.addEventListener('load', function () { ... }): 当页面加载完成后,执行匿名函数中的代码。
  2. var mask = document.querySelector('.mask'): 获取class为"mask"的元素,即遮挡层。
  3. var bigMask = document.querySelector('.big_mask'): 获取class为"big_mask"的元素,即放大图片区域。
  4. var bigImg = document.querySelector('.father'): 获取class为"father"的元素,即父容器。
  5. bigImg.addEventListener('mouseover', function () { ... }): 给父容器添加鼠标移入事件监听器,当鼠标移入父容器时执行匿名函数中的代码。
  6. mask.style.display = 'block'bigMask.style.display = 'block': 显示遮挡层和放大图片区域,将它们的display属性设置为"block"。
  7. bigImg.addEventListener('mouseout', function () { ... }): 给父容器添加鼠标移出事件监听器,当鼠标移出父容器时执行匿名函数中的代码。
  8. mask.style.display = 'none'bigMask.style.display = 'none': 隐藏遮挡层和放大图片区域,将它们的display属性设置为"none"。
  9. bigImg.addEventListener('mousemove', function (e) { ... }): 给父容器添加鼠标移动事件监听器,当鼠标在父容器内移动时执行匿名函数中的代码。
  10. e.pageX - this.offsetLefte.pageY - this.offsetTop: 获取鼠标在父容器内的坐标,减去父容器的偏移量,得到相对于父容器的坐标。
  11. maskXmaskY: 计算遮挡层的位置,即遮挡层的左上角相对于父容器的坐标。
  12. maskMax: 遮挡层的最大移动范围,等于父容器的高度减去遮挡层的高度。
  13. maskX <= 0maskX >= maskMaxmaskY <= 0maskY >= maskMax: 限制遮挡层的移动范围在父容器内。
  14. mask.style.left = maskX + 'px'mask.style.top = maskY + 'px': 设置遮挡层的left和top样式,实现遮挡层随鼠标移动。
  15. most.offsetWidth - bigMask.offsetWidth: 放大图片在放大区域内的最大移动范围,等于放大图片的宽度减去放大区域的宽度。
  16. bigXbigY: 计算放大图片的位置,即放大图片在放大区域内的左上角相对于放大区域的坐标。
  17. most.style.left = -bigX + 'px'most.style.top = -bigY + 'px': 设置放大图片的left和top样式,实现放大图片的移动。

通过以上代码,当鼠标移入父容器时,会显示遮挡层和放大图片区域;当鼠标在父容器内移动时,会计算遮挡层和放大图片的位置,从而实现放大镜效果。当鼠标移出父容器时,隐藏遮挡层和放大图片区域。

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值