javascript - 为什么我需要 setTimeout 才能使动画工作?

标签 javascript css

<分区>

在下面的代码中,如果我省略了 setTimeout,转换将不起作用。这里设置超时的目的是什么?

  function showCircle (top, left, radius) {
  let circleDiv = document.querySelector(".circle"); 

  circleDiv.style.top = top + "px";
  circleDiv.style.left = left + "px";

  setTimeout (() => {
    circleDiv.style.width = radius*2 + "px";
  circleDiv.style.height = radius*2 + "px";
  },0)
}

showCircle (150,150,100);

最佳答案

如果没有延迟(某些浏览器需要超过 0 毫秒的延迟,这基本上只是让更改等到堆栈为空),浏览器不会发现 css 属性已更改。

实际上,这与浏览器“绘制/重新绘制”过渡有关。

这里有一篇文章解决了这个问题,就像您“修复”它一样。

http://www.mikechambers.com/blog/2011/07/20/timing-issues-when-animating-with-css3-transitions/

关于javascript - 为什么我需要 setTimeout 才能使动画工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57542249/

上一篇:html - 仅当父元素在 Sass 中没有特定类时才绘制边框

下一篇:html - 无法使用 css/html 并排放置图像和文本

相关文章:

javascript - 迪维 : Hide Button when clicked

css - 如何在悬停时反转转换?

html - 如何在悬停时向表格 tr 元素添加框阴影?

html - 显示两个ul(显示: inline) in the same row

javascript - 使用单选按钮在面板中对齐

JavaScript Split 和 jQuery .val() 我可以链接它们吗?

javascript - jQuery 的局限性是什么?

javascript - 如何在不使用科学计数法的情况下显示 "toPrecision"的结果?

javascript - 使用 Canvas Javascript对 Sprite 进行碰撞检测

css - 如何使具有负左值的 CSS background-position 可见?