10

我展示了一个动画 GIF,它在我的 AJAX 请求正在进行时运行,并在我的脚本处理完响应后停止。

虽然这可行,但我注意到,当我的脚本(其中包含一些相当大量的 DOM 更新)中处理来自请求的响应时,动画会冻结。

我的研究使我相信这是因为 GIF 的动画发生在运行 javascript 的同一线程上 - 浏览器是真正的单线程。这是对当前所有主流浏览器(例如 Chrome、Firefox、Safari、IE)的正确解释吗?

其次,为什么要这样做?浏览器真的不可能将一个线程专用于 GIF 动画,以便在执行一段 javascript 时它们不会冻结吗?

更新

是一个有趣的页面。它谈到了使用纯 CSS3 动画。他们仍然在 Firefox 中冻结 - 也许很快 FF 会解决这个问题。看起来我应该考虑将 CSS 用于动画而不是使用 GIF。

4

2 回答 2

1

我想问题是(恕我直言),当您更新 dom 时,浏览器不会重新绘制页面,因此图像会冻结。

尝试在不更改 dom 的情况下做繁重的事情,gif 应该动画(如果你的 cpu 很忙,会慢慢地)但不会冻结。

如果它仍然冻结,您可以明确地为该工作创建一个新线程(使用 webworker),但如果我没记错的话,您无法从 webworker 更改 dom。

于 2013-06-05T09:55:13.870 回答
1

这可能是众所周知的,但 CSS3 在大多数现代浏览器中都有它自己的线程。您应该能够在 javascript 中设置断点,并且仍然可以看到您的 css 动画正在运行。查看此链接以了解如何使用纯 css 为精灵设置动画:

http://blog.teamtreehouse.com/css-sprite-sheet-animations-steps

于 2016-05-06T19:41:32.513 回答