Frage

Grundsätzlich möchte ich in der Lage sein, jeden Befehl in einem $ .holdTillFinished () -Methode zu wickeln, die nicht Ausführung ermöglicht es weiterhin, bis die angegebene Methode / Jquery Animation Ausführung beendet ist.

Ich vermute, dass dies oder sogar unmöglich in Javascript schwierig sein kann, aber ich bin der Hoffnung, jemand wird wissen.

Ich will nicht darüber hören, wie ich einen Rückruf in eine Animation passieren kann, um es onComplete, oder irgendetwas anderes wie das ausgeführt zu haben.

Ich möchte wirklich wissen, ob so etwas möglich ist und wie man das macht.

Wenn das wird nicht passieren, wenn jemand eine nette Schlange Plugin weiß, dass beide in der Lage ist, von Warteschlangen benutzerdefinierte Methoden und Animationen, die zu kühl sein würde. Was ich wirklich will, ist ein Weg, obwohl die Ausführung zu verzögern. (Und ermöglichen gleichzeitig Animationen funktionieren)

War es hilfreich?

Lösung

  

Ich vermute, dass dies schwierig sein kann, oder sogar unmöglich in Javascript

Ihr Verdacht ist richtig. Methoden wie Animationen, Benutzereingaben Loops und ‚async = true‘ XMLHttpRequests muss Rückkehr Steuerung an den Browser um, und der Browser zurück kann nicht die Kontrolle zu gehen, bis jede Verschachtelungsebene der Funktionsaufruf zurückgekehrt . Das bedeutet, dass alle Ihre Code, einschließlich der Funktion, die ‚holdTillFinished ()‘ genannt entspannen müssten. So ist nun ‚holdTillFinished ()‘ ist unmöglich

Andere Sprachen haben Flow-Control-Funktionen, die es Ihnen ermöglichen, effektiv einen asynchronen Prozess als einen ausführen, die den Anrufer erscheint synchron zu sein, und in ähnlicher Weise umgekehrt. Zu den bekanntesten sind Themen und Fortsetzungen . JavaScript nicht über diese Einrichtungen besitzen, so dass die beste Sie ist Timeouts und Rückrufe tun können.

(Definieren eines Callback als Inline-Funktion Zugriff auf die einschließende Funktion der Variablen in einem Verschluss zumindest nehmen aus ihm einige der Schmerz nicht zu gewinnen, einige andere Sprachen haben jedes Stück umschließenden Zustand starten in die Eigenschaften eines Objekts Einwickeln um dies zu erreichen.)

Andere Tipps

Sie sind wahrscheinlich der Suche nach http://docs.jquery.com/Effects/queue

Aber wenn Sie sich für eine allgemeinere Art und Weise zu verzögern, Dinge zu betrachten, habe ich diesen Schnipsel verwendet vor (ich habe es nicht schreiben, so dass alle Kredite an den ursprünglichen Autor geht):

//Simple wrapper enabling setTimout within chained functions.
$.fn.wait = function(time, type) {
  time = time || 1000;
  type = type || "fx";
  return this.queue(type, function() {
    var self = this;
    setTimeout(function() {
      $(self).dequeue();
    }, time);
  });
};

Sie könnten eine Publish / Subscribe-Architektur verwenden, um zu erreichen, was Sie wollen. Ohne viel zu wissen, was genau Sie erreichen wollen, ist meine Vermutung dies für Sie arbeiten.

Die Art und Weise dies funktioniert, ist, dass Sie bei der Beendigung der Funktion als Ereignis aussehen, die Sie hören können, und fügen Sie Handler. Dojo hat einen PubSub Mechanismus , obwohl ich bin sicher, es gibt andere.

Sie verteidigt nach Situation, aber normalerweise ist es notwendig, eine Verarbeitung von Bild zu zeigen, gezeigt werden, wenn AJAX aufgerufen wird oder eine Schleife in Javascript ausgeführt wird. Ich habe eine Situation, wo ich AJAX in einer Schleife anzurufenden, dass der Benutzer die Verarbeitung von Bild zu zeigen, gezeigt. Zu beenden ich einen Trick getan. Ich habe eine Schaltfläche setzte den Auftrag abzubrechen, wenn diese Funktion aufgerufen wird ich eine globale Variable sagen ‚cancelJob‘ auf true und in der Schleife, wo ich diesen global bin Überprüfung, ob dies wahr ist der Lauf return false und das Skript stoppt.

var cancelJob = false;
foreach(){
   if(cancelJob == true)
       return false;
}

function cancelButtonPress(){
   cancelJob = true;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top