我遇到了完全相同的问题,但没有找到解决方案!动画 GIF 行为在不同设备之间似乎确实不一致。这就是坏消息。好消息是我已经解决了问题,特别是针对像你这样的 ajax 加载器。
您需要为 GIF 的每一帧制作单独的图像文件。这听起来很可怕,但对我来说效果还不错——我的 8 帧 8kb GIF 变成了 8 张总共 11kb 的 png 图像,而且我得到了 8 位透明度的奖励,所以我不必担心背景颜色。这确实意味着客户端必须对单独的图像提出额外的请求,因此帧越少越好。我将图像命名为 0.png、1.png ... 7.png 并将它们放在一个文件夹中以保持它们的整洁。
现在是代码!我会在下面解释。
HTML:
<img src="images/loader/0.png" id="headLoader" />
<div id="loaderKicker" style="visibility:hidden;"></div>
JavaScript (jQuery):
var loaderImg = $("#headLoader");
var loaderProg = 0;
setInterval(function() {
$("#loaderKicker").html(loaderProg);
loaderImg.attr("src", "images/loader/"+loaderProg+".png");
loaderProg = (loaderProg+1)%8;
}, 300);
首先img
,我们有动画。我们使用setInterval
更改图像 url 来循环浏览帧。很短的时间间隔显然会给设备带来负担,所以我们不想发疯。我有一个非常便宜的 Android 2.2 设备,而且 200 毫秒以上的时间间隔似乎可以正常工作,而不会破坏应用程序的性能。
div 可以在较旧的loaderKicker
设备上进行这项工作(例如我们的目标设备:))。当我们所做的只是更新图像 url时, Android 似乎会忽略这些调用,因此我们通过更新隐藏 div 的内容来解决这个问题。我尝试总是用“x”更新,但似乎内容实际上必须不同。幻灯片编号效果很好。
就是这样了!这有点像 hack 工作,但它适用于我测试过的所有东西(Android 2.2、2.3、4.0、iOS6、Firefox、IE、Chrome),如果你只在一个 ajax 加载器上执行它,那么你将在任何地方使用似乎都可以。
另一种完全独立的解决方案是使用 HTML5 画布为图像设置动画,但我无法告诉您有关旧设备对它们的支持的任何信息。