飞鸟的一生 2024-10-12 13:59 采纳率: 14.3%
浏览 27

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;
        }

        .left {
            width: 300px;
            height: 300px;
            float: left;
        }

        .left img {
            display: block;
            width: 300px;
            height: 300px;
            position: relative;
            top: 0px;
            left: 0px;
        }

        .right {
            float: left;
            margin-left: 20px;
        }

        ul li {
            width: 100px;
            height: 100px;
        }

        ul li img {
            width: 100px;
            height: 100px;
        }

        .active {
            border: 1px slateblue solid;
        }

        .large {
            width: 300px;
            height: 300px;
            z-index: 999;
            background-repeat: no-repeat;
            background-size: 300px 300px;
            position: absolute;
            top: 0;
            left: 300px;
            cursor: move;
            border: 1px solid black;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">
            <img src="../正式开始/图片/可爱头像1.png" alt="">
        </div>
        <div class="right">
            <ul>
                <li><img src="../正式开始/图片/可爱头像1.png" alt=""></li>
                <li><img src="../正式开始/图片/可爱头像2.png" alt=""></li>
                <li><img src="../正式开始/图片/可爱头像3.png" alt=""></li>
            </ul>
        </div>
        <div class="large" style="display: none;">
        </div>
    </div>
    <script>
        const rg = document.querySelector('.right li img')
        const lg = document.querySelector('.left img')
        const rig = document.querySelector('.right ul')
        const large = document.querySelector('.large')
        rig.addEventListener('mouseover', function (e) {
            if (e.target.tagName == 'IMG') {
                const active = document.querySelector('ul .active')
                if (active) active.classList.remove('active')
                e.target.parentNode.classList.add('active')
                lg.src = e.target.src
            }
        })
        let timeID = null
        function show() {
            clearTimeout(timeID)
            large.style.display = 'block'
            large.style.backgroundImage = `url(${lg.src})`
        }
        function hide() {
            const timeID = setTimeout(function () {
                large.style.display = 'none'
            }, 200);
        }
        lg.addEventListener('mouseover', show)
        lg.addEventListener('mouseleave', hide)
        large.addEventListener('mouseover', show)
        large.addEventListener('mouseleave', hide)

    </script>
</body>

</html>

```求解答,为什么large模块点击了不能固定,如果想鼠标经过large模块可以固定应该怎么办
  • 写回答

1条回答 默认 最新

  • 梦境使者 2024-10-12 16:42
    关注
    const timeID = setTimeout(function () {
                large.style.display = 'none'
            }, 200);
    

    更改为

    timeID = setTimeout(function () {
                large.style.display = 'none'
            }, 200);
    

    代码可以优化下

    
    <!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-sizing: border-box;
            }
            .box {
                height: 300px;
                position: relative;
                display: flex;
            }
    
            .left {
                width: 300px;
                height: 300px;
            }
    
            .left img {
                display: block;
                width: 300px;
                height: 300px;
                position: relative;
                top: 0px;
                left: 0px;
            }
    
            .right {
                margin-left: 20px;
                display: flex;
                flex-direction: column;
            }
            .right > img {
                width: 100px;
                height: 100px;
            }
    
            .active {
                border: 1px slateblue solid;
            }
            .large.show {
                display: block ;
            }
    
            .large {
                width: 300px;
                height: 300px;
                z-index: 999;
                background-repeat: no-repeat;
                background-size: 300px 300px;
                position: absolute;
                top: 0;
                left: 300px;
                cursor: move;
                border: 1px solid black;
                display: none;
            }
        </style>
    </head>
    
    <body>
    <div class="box">
        <div class="left">
            <img src="../正式开始/图片/可爱头像1.png" alt="">
        </div>
        <div class="right">
            <img src="../正式开始/图片/可爱头像1.png" alt="">
            <img src="../正式开始/图片/可爱头像2.png" alt="">
            <img src="../正式开始/图片/可爱头像3.png" alt="">
        </div>
        <div class="large">
        </div>
    </div>
    <script>
        const box = document.querySelector('.box');
        const large = document.querySelector('.large');
        const leftImg = document.querySelector('.left img');
        const right = document.querySelector('.right')
        right.addEventListener('mouseover', function (e) {
            if (e.target.tagName == 'IMG') {
                const active = document.querySelector('.right .active')
                if (active) active.classList.remove('active')
                e.target.classList.add('active')
                leftImg.src = e.target.src
            }
        })
        function hide() {
            if (large.classList.contains('show')) {
                large.classList.remove('show');
            }
        }
        function show() {
            if (!large.classList.contains('show')) {
                large.classList.add('show');
            }
        }
        const mouseover = (e) => {
            const activeE = e.target;
            if (activeE === leftImg || activeE === large) {
                show();
            } else {
                hide()
            }
        }
        const mouseleave = () => {
            hide()
        }
        box.addEventListener('mouseover', mouseover);
        box.addEventListener('mouseleave', mouseleave);
    </script>
    </body>
    
    </html>
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月12日