Ich habe ein Problem mit normalen ( Nicht-Ajax- ) Funktionen, die viele Animationen in jeder von ihnen beinhalten. Momentan habe ich einfach eine setTimeout
Zwischenfunktion, aber diese ist nicht perfekt, da keine Browser / Computer gleich sind.
Zusätzlicher Hinweis: Beide haben separate Animationen / etc, die kollidieren.
Ich kann nicht einfach einen in die Rückruffunktion eines anderen setzen
// 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);
Gibt es sowieso in js / jQuery:
// Pseudo-code
-do FunctionOne()
-when finished :: run -> FunctionTwo()
Ich weiß über $.when()
& Bescheid $.done()
, aber diese sind für AJAX ...
- MEINE AKTUALISIERTE LÖSUNG
jQuery verfügt über eine exponierte Variable (die aus irgendeinem Grund nirgendwo in den jQuery-Dokumenten aufgeführt ist) mit dem Namen $ .timers, die das Array der derzeit stattfindenden Animationen enthält.
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);
};
Grundlegende Verwendung:
// 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();
});
FunctionOne
es keine Auszeit gibt oder so, können Sie einfach anrufenFunctionOne(); FunctionTwo();
, nicht wahr?