Ich verwende JQuery als solches:
$(window).resize(function() { ... });
Es scheint jedoch, dass das obige .resize
Ereignis mehrmals ausgelöst wird, wenn die Person ihre Browserfenster manuell durch Ziehen der Fensterkante ändert, um sie größer / kleiner zu machen .
Frage: Wie rufe ich eine Funktion auf, nachdem die Größe des Browserfensters abgeschlossen wurde (sodass das Ereignis nur einmal ausgelöst wird)?
javascript
jquery
Sarah
quelle
quelle
Antworten:
Hier ist eine Modifikation der CMS-Lösung, die an mehreren Stellen in Ihrem Code aufgerufen werden kann:
Verwendung:
Die Lösung von CMS ist in Ordnung, wenn Sie sie nur einmal aufrufen. Wenn Sie sie jedoch mehrmals aufrufen, z. B. wenn verschiedene Teile Ihres Codes separate Rückrufe für die Fenstergrößenänderung einrichten, schlägt dies fehl, da sie die
timer
Variable gemeinsam nutzen.Mit dieser Änderung geben Sie für jeden Rückruf eine eindeutige ID an. Diese eindeutigen IDs werden verwendet, um alle Timeout-Ereignisse getrennt zu halten.
quelle
Ich ziehe es vor, eine Veranstaltung zu erstellen:
So erstellen Sie es:
Sie könnten dies irgendwo in einer globalen Javascript-Datei haben.
quelle
Ich verwende die folgende Funktion, um wiederholte Aktionen zu verzögern. Sie funktioniert für Ihren Fall:
Verwendung:
Die an sie übergebene Rückruffunktion wird nur ausgeführt, wenn der letzte Aufruf zur Verzögerung nach der angegebenen Zeitspanne erfolgt ist. Andernfalls wird ein Timer zurückgesetzt. Ich finde dies nützlich für andere Zwecke, z. B. zum Erkennen, wann der Benutzer aufgehört hat zu tippen usw. ..
quelle
$(window).resize
), weil sie alle dietimer
Variable gemeinsam nutzen. Siehe meine Antwort unten für die vorgeschlagene Lösung.Wenn Sie Underscore.js installiert haben, können Sie:
quelle
Einige der zuvor genannten Lösungen haben bei mir nicht funktioniert, obwohl sie allgemeiner sind. Alternativ habe ich diesen gefunden , der den Job bei Fenstergrößenänderung ausgeführt hat:
quelle
Vielen Dank an David Walsh, hier ist eine Vanille-Version von Underscore Debounce.
Code:
Einfache Verwendung:
Ref: http://davidwalsh.name/javascript-debounce-function
quelle
Wie ich weiß, können Sie einige Aktionen nicht genau dann ausführen, wenn die Größenänderung deaktiviert ist, einfach weil Sie die Aktionen zukünftiger Benutzer nicht kennen. Sie können jedoch davon ausgehen, dass die Zeit zwischen zwei Größenänderungsereignissen vergangen ist. Wenn Sie also etwas länger als diese Zeit warten und keine Größenänderung vorgenommen wird, können Sie Ihre Funktion aufrufen.
Die Idee ist, dass wir verwenden
setTimeout
und es ist ID, um es zu speichern oder zu löschen. Zum Beispiel wissen wir, dass die Zeit zwischen zwei Größenänderungsereignissen 500 ms beträgt, daher werden wir 750 ms warten.quelle
Global verzögerten Listener deklarieren:
Und unten verwenden Sie Listener, um
resized
Ereignisse wie Sie möchten:quelle
Für mich geht das. Siehe diese Lösung - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
quelle
Einfaches jQuery-Plugin für Ereignisse mit verzögerter Fenstergröße.
SYNTAX:
Fügen Sie eine neue Funktion hinzu, um die Größe des Ereignisses zu ändern
Entfernen Sie die zuvor hinzugefügte Funktion (indem Sie ihre ID deklarieren)
Entfernen Sie alle Funktionen
VERWENDUNG:
NUTZUNGSAUSGABE:
PLUGIN:
quelle
Angenommen, der Mauszeiger sollte nach der Größenänderung des Fensters zum Dokument zurückkehren, können wir mit dem Ereignis onmouseover ein rückrufähnliches Verhalten erstellen. Vergessen Sie nicht, dass diese Lösung möglicherweise nicht wie erwartet für Touchscreen-fähige Bildschirme funktioniert.
quelle
Folgendes habe ich implementiert:
$ (Fenster) .resize (function () {setTimeout (someFunction, 500);});
Wir können das setTimeout löschen, wenn wir erwarten, dass die Größenänderung kleiner als ist
500ms
Viel Glück...
quelle