为了在网站(如智能手机或平板电脑)上制作 3D 对象动画,我每秒将 DIV 的背景图像更改 25 次。
这是 Javascript 函数(jQuery):
var playiPhoneVideo = function() {
window.setTimeout(changeBG, 800); // delayed starting time
};
var iIndex = 1;
var changeBG = function() {
$('.iphone').css('background-image', 'url(assets/iphone-ani/iPhone5_'+iIndex+'.png)'); // change BG
iIndex++;
if(iIndex <= 41) {
window.setTimeout(changeBG, 40); // 25 fps
}
}
setTimeout
用 40 毫秒确保每秒 25 帧。图像在动画/视频开始之前预加载。
现在这在所有桌面操作系统上都表现得很好。它在移动 IE10 (Windows RT) 上表现得更好(实际上我很惊讶它运行得如此之好)。它只能在 iOS (iPad mini) 上运行。 它在 Android(Xperia Tablet Z、Sony Tablet S)上运行得非常糟糕。
我做了什么试图最大限度地提高性能:
- 将图像文件大小从 200kb 更改为 20kb(质量非常差)
setTimeout
通过增加到100 毫秒(慢动作)来减慢递归 JS 循环iIndex++
通过替换为仅每秒或每第四个图像使用一次iIndex = iIndex + 2/4
- 试图用硬件加速 DIV
-webkit-transform: translate3d(0,0,0);
(我知道,没用但值得一试;-))
即使结合了所有这些优化,动画也运行得如此糟糕。它几乎没有好转。
我觉得这与图像无关,而是与 Chrome 在 Android/Android 浏览器上的缓慢 Javascript 性能有关,但我不确定。
有什么方法可以优化我的 Javascript、我的循环、图像或其他任何东西,以确保在 Android 上流畅(和可接受的质量)动画?