JS去除过渡效果,设置width:1000px;然后加过渡效果,为什么width是以过渡变化?

  1. JS给div的style对象设置transition:none;width:1000px; 然后在设置transition:all .4s; 为什么在网页中div的width是以过渡效果显示的? 而不是直接一下变为1000px?

  2. 和event loop有关吗?

  3. 是不是因为浏览器在解析的时候会先收集所有style属性,然后一起去设置?

  4. 和浏览器渲染有关吗?

  5. clipboard.png

阅读 2.9k
1 个回答

没错,和浏览器渲染有关,你这么写,就相当于 transition = 'none' 是无效的,直接被后面的覆盖了。

如果要达到你的目的,需要让浏览器强行重绘。

setTimeout(() => {
  div.style.transition  = 'none';
  div.style.width = '500px';
  div.offsetWidth;//重绘
  div.style.transition = 'all .4s';
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题