我遇到了正常(非 ajax)函数的问题,这些函数在每个函数中都涉及大量动画。目前我只有一个setTimeout
between 函数,但这并不完美,因为没有浏览器/计算机是相同的。
附加说明:它们都有相互碰撞的单独动画/等。
我不能简单地将一个放在另一个的回调函数中
// multiple dom animations / etc
FunctionOne();
// What I -was- doing to wait till running the next function filled
// with animations, etc
setTimeout(function () {
FunctionTwo(); // other dom animations (some triggering on previous ones)
}, 1000);
无论如何在 js/jQuery 中有:
// Pseudo-code
-do FunctionOne()
-when finished :: run -> FunctionTwo()
我知道$.when()
& $.done()
,但那些是针对 AJAX 的...
- 我更新的解决方案
jQuery 有一个名为 $.timers 的公开变量(由于某种原因未在 jQuery 文档中的任何地方列出),它保存当前发生的动画数组。
function animationsTest (callback) {
// Test if ANY/ALL page animations are currently active
var testAnimationInterval = setInterval(function () {
if (! $.timers.length) { // any page animations finished
clearInterval(testAnimationInterval);
callback();
}
}, 25);
};
基本用途:
// run some function with animations etc
functionWithAnimations();
animationsTest(function () { // <-- this will run once all the above animations are finished
// your callback (things to do after all animations are done)
runNextAnimations();
});