我遇到了正常(非 ajax)函数的问题,每个函数都包含大量动画。目前我只是有一个setTimeout
功能之间,但这并不完美,因为没有浏览器/计算机是相同的。
附加说明:它们都有单独的动画/等碰撞。
我不能简单地将一个放在另一个的回调函数中
// 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 有一个公开的变量(由于某种原因没有在 jQuery 文档中的任何地方列出),称为 $.timers,它保存当前正在发生的动画数组。
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();
});