答案不再有效
看起来这里描述的行为(将img
引用动画 gif 的标签写入画布会导致写入 gif 的不同帧,如果它img
是 DOM 的一部分或可见)至少在 Chrome 中发生了变化。可能有也可能没有关于什么是正确行为的文档。:)
此外,webkitRequestAnimationFrame
不再具有采用额外参数的行为,即元素 X,这样当 X 不可见时,请求的函数将不会运行。出于性能和电池寿命的原因,您可能希望传递给的许多函数requestAnimationFrame
在执行任何需要绘图的操作之前检查可见性。
前:
查看固定版本:
http://jsfiddle.net/eGjak/96/
如果您将 a 添加console.log()
到绘制图像的函数中,您将看到它正在被调用。问题似乎是图像本身没有动画,可能是因为浏览器不会费心更新不属于 DOM 的动画图像。
我的解决方案是使动画 gif 成为 DOM 的一部分,大小为 0,它工作得很好。
您可以通过加载http://jsfiddle.net/eGjak/96/show/并在 Windows 或 Linux 上使用 ctrl-shift-I 检查元素来验证动画是否显示在画布上而不是图像标签中/ alt-cmd-我。
编辑:这是一个奖金!
webkitRequestAnimationFrame
比 Mozilla 等价的参数多一个参数,以允许您的动画仅在正在动画的元素可见时运行。查看
http://jsfiddle.net/kmKZa/8/
并打开控制台。您会看到,当您隐藏画布时,动画函数将停止调用。当您再次切换可见的画布时,将再次调用动画函数。