javascript - 关于transition的一点疑惑
ringa_lee
ringa_lee 2017-04-10 15:14:08
[JavaScript讨论组]

这里是一个demo

假设有元素

<p class="demo" style="position:absolute;left:0;height:100px;width:100px;background:blue;"></p>

有css

.change{transition:all 1s;}    

用js修改其样式

window.onload = function(){
    var demo =document.querySelector('.demo');
    demo.style.left = '200px' ; // 1
    demo.style.background = 'pink' ; // 2
    demo.classList.add('change') ; // 3
}

为什么left,background的值是渐变的?明明是先改变值,后添加transition属性的

如果是用jquery,在addClass前添加一个show方法,就可修复此bug,不过这又是为什么?

window.onload = function(){
    // $('.demo').css({'left':'200px','background':'pink'}).addClass('change'); 
                // 和上面一样会渐变
    $('.demo').css({'left':'200px','background':'pink'}).show().addClass('change'); 
                // 不会简便
}

解决方法,如此便好

window.onload = function(){
    var demo =document.querySelector('.demo');
    demo.style.left = '200px' ; // 1
    demo.style.background = 'pink' ; // 2
    setTimeout(function(){
        demo.classList.add('change') ; // 3
    })
}
ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHP中文网

这个和浏览器渲染优化有关,你去执行js代码,等到下一帧的时候才回去真正做一次绘制,解决这个你可以在指定完style之后,强制一次reflow,例如可以 ele.offsetWidth = ele.offsetWidth

阿神

有可能跟js执行速度和你的.change{transition:all 1s;} 这个设置的时间有关。加上show的话有一个show的时间过程。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号