账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    下面两个代码为什么执行结果不一样
    36
    0

    代码如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>test</title>
        <style>
            .move {
                position: absolute;
                width: 100px;
                height: 100px;
                background-color: red;
            }
            .start {
                transform: translateX(0);
            }
            .move-active {
                transition: transform 3s ease;
            }
            .end {
                transform: translateX(100px);
            }
        </style>
    </head>
    <body>
        <div class="move" style="display: none;"></div>
    </body>
    <script>
        // 1
        // var div = document.querySelector('.move');
        // div.classList.add('start');
        // div.classList.add('move-active');
        // requestAnimationFrame(() => {
        //     div.classList.remove('start');
        //     div.classList.add('end');
        // });
        // div.style.display = 'block';
    
        // 2
        setTimeout(() => {
            var div = document.querySelector('.move');
            div.classList.add('start');
            div.classList.add('move-active');
            requestAnimationFrame(() => {
                div.classList.remove('start');
                div.classList.add('end');
            });
            div.style.display = 'block';
        }, 0);
    </script>
    </html>

    结果

    1. 第一部分代码,会有动画效果
    2. 第二部分代码,大概率没有动画效果

    疑问

    为什么同样的代码加了setTimeout之后会有不同的效果,setTimeout不是把整个代码块放到事件循环线程中么,然后在加入js引擎线程中执行么,按道理来说,这两个代码并不会导致不一样的结果啊

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部