У меня проблема с нормальными (не-ajax) функциями, которые включают в себя множество анимаций внутри каждого из них. В настоящее время у меня просто есть функция setTimeout
между функциями, но это не идеально, поскольку ни один браузер/компьютеры не совпадают.
Дополнительное примечание: у обоих есть отдельные анимации /etc, которые сталкиваются.
Я не могу просто поместить его в функцию обратного вызова другого
// 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();
});