关于transition的一点疑惑

这里是一个demo
假设有元素
有css
.change{transition:all1s;}
用js修改其样式
window.onload=function(){
vardemo=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(){
vardemo=document.querySelector('.demo');
demo.style.left='200px';//1
demo.style.background='pink';//2
setTimeout(function(){
demo.classList.add('change');//3
})
}
慕斯王
浏览 269回答 2
2回答

青春有我

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

料青山看我应如是

有可能跟js执行速度和你的.change{transition:all1s;}这个设置的时间有关。加上show的话有一个show的时间过程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript