Wie rufe ich eine Funktion auf, wenn die Größenänderung des Browserfensters abgeschlossen ist?
Ich versuche es so zu machen, habe aber Probleme. Ich verwende die JQuery Resize-Ereignisfunktion:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
Diese Funktion wird jedoch kontinuierlich aufgerufen, wenn der Benutzer die Größe des Browserfensters manuell ändert. Dies bedeutet, dass diese Funktion in kurzen Zeitabständen dutzende Male aufgerufen werden kann.
Wie kann ich die Formatfunktion nur rufen ein einziges Mal (einmal das Browser - Fenster fertig Redimensionierung hat)?
AKTUALISIEREN
Auch ohne eine globale Variable verwenden zu müssen.
javascript
jquery
html
Nickb
quelle
quelle
Antworten:
Hier ist ein Beispiel mit den Anweisungen von thejh
Sie können eine Referenz-ID für jedes setInterval oder setTimeout speichern. So was:
quelle
Entprellen .
Beachten Sie, dass Sie diese Methode für alles verwenden können, was Sie entprellen möchten (Schlüsselereignisse usw.).
Passen Sie den Timeout-Parameter an, um den gewünschten Effekt zu erzielen.
quelle
func
, wobei der internethis
Zeiger aufscope
und mitArray.prototype.slice.call(args)
(die ein Standardarray daraus generierenargs
) als Argumente zeigtSie können verwenden
setTimeout()
undclearTimeout()
in Verbindung mitjQuery.data
:Aktualisieren
Ich habe eine Erweiterung geschrieben , um den Standard
on
(&bind
) -Event-Handler von jQuery zu verbessern . Es fügt den ausgewählten Elementen eine Ereignishandlerfunktion für ein oder mehrere Ereignisse hinzu, wenn das Ereignis für ein bestimmtes Intervall nicht ausgelöst wurde. Dies ist nützlich, wenn Sie einen Rückruf erst nach einer Verzögerung wie dem Größenänderungsereignis oder einem anderen auslösen möchten. https://github.com/yckart/jquery.unevent.jsVerwenden Sie es wie jeden anderen
on
oderbind
-event-Handler, außer dass Sie als letzten einen zusätzlichen Parameter übergeben können:http://jsfiddle.net/ARTsinn/EqqHx/
quelle
quelle
Nur um das oben Gesagte zu ergänzen, ist es üblich, dass unerwünschte Größenänderungsereignisse auftreten, weil Bildlaufleisten ein- und ausgehen. Hier ist ein Code, um dies zu vermeiden:
siehe jsfiddle
quelle
Underscore.js bietet einige großartige Methoden für diese Aufgabe:
throttle
unddebounce
. Auch wenn Sie keinen Unterstrich verwenden, werfen Sie einen Blick auf die Quelle dieser Funktionen. Hier ist ein Beispiel:quelle
Das ist mein Ansatz:
Der Resize-Event-Listener fängt alle eingehenden Resize-Aufrufe ab, erstellt für jeden eine Timeout-Funktion und speichert die Timeout-ID zusammen mit einer iterierenden Nummer
'id-'
, die im Array vorangestellt ist (um als Array-Schlüssel verwendet werden zu können)tos
.Jedes Mal, wenn das Timout ausgelöst wird, ruft es die
fn
-function auf, die prüft, ob dies das letzte Timeout imtos
Array war (die fn-Funktion löscht jedes ausgeführte Timout). Wenn true (=if(len-1 == 0)
), ist die Größenänderung abgeschlossen.quelle
jQuery bietet eine
off
Methode zum Entfernen des Ereignishandlersquelle