Ist JavaScript Single-Threaded? Wenn nicht, wie erhalte ich synchronisierten Zugriff auf freigegebene Daten?

Ich habe eine Webseite mitDIVs mit amouseover Handler, der eine Popup-Informationsblase anzeigen soll. Ich möchte nicht, dass mehr als eine Infoblase gleichzeitig sichtbar ist. Wenn der Benutzer die Maus jedoch schnell über zwei Elemente bewegt, werden manchmal zwei Blasen angezeigt. Dies sollte nicht passieren, da der Code zum Anzeigen eines Popups das vorherige Popup abbricht.

Wenn dies ein System mit mehreren Threads wäre, wäre das Problem offensichtlich: Es gibt zwei Threads, die versuchen, ein Popup anzuzeigen, und beide brechen vorhandene Popups ab und öffnen dann ihre eigenen Popups. Aber ich nahm an, dass JavaScript immer Single-Threaded läuft, was dies verhindern würde. Liege ich falsch? Werden Ereignishandler asynchron ausgeführt. In diesem Fall muss der Zugriff auf freigegebene Daten synchronisiert werden, oder muss ich stattdessen nach Fehlern im Bibliothekscode suchen, um Popups abzubrechen.

Bearbeitet, um hinzuzufügen:

Die fragliche Bibliothek istSIMILE Timeline und seine Ajax-Bibliothek;Die Ereignisbehandlungsroutine ruft aufSimileAjax.DOM.cancelEvent(domEvt), was ich aufgrund des Namens vermute, hebt das Sprudeln von Ereignissen auf;Um die Sache noch komplizierter zu machen, starte ich gerade eine Zeitüberschreitung, die nicht von einem abgebrochen wirdmoustout zeigt das Popup, um zu verhindern, dass Popups nervig flackern, aber den umgekehrten Effekt haben.

Ich werde es noch einmal ausprobieren und sehen, ob ich herausfinden kann, wo ich falsch liege. :-)

Antworten auf die Frage(7)

Ihre Antwort auf die Frage