Stabilisierung
In der Webanwendung
Klicken Sie zu Beginn auf die Schaltfläche <Text> <button id="btn">Klick</button> </body> <Skript> const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); } btn.addEventListener('klicken', Geld bezahlen) </Skript> Definieren von Entprellung const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); } Funktion Entprellung(Funktion) { //Gibt die Funktion in der Funktion zurück, gibt die Funktion nur zurück, wenn geklickt wird return function () { Funktion() } } btn.addEventListener('klicken', entprellen(Geld bezahlen)) Einstellen der Verzögerung const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); } Funktion Entprellung(Funktion, Verzögerung) { Rückgabefunktion () { setTimeout(_ => func(), Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Verzögerung löschen: Ausführung fehlgeschlagen Grund Bei jedem Klick wird der Inhalt der Return-Funktion ausgeführt Die Ausführungsfunktion jedes Klicks ist unabhängig und stört sich nicht gegenseitig. Da zwischen ihnen keine Verbindung besteht, funktioniert die Löschverzögerung hier überhaupt nicht Um diese unabhängigen Ausführungsfunktionen zu verbinden, müssen wir Bereichsketten (Closures) verwenden. const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); } Funktion Entprellung(Funktion, Verzögerung) { Rückgabefunktion () { Timer einschalten Intervall löschen(Timer) Timer = setTimeout(_ => func(), Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Platzieren Sie den Timer außerhalb der Rückgabefunktion, sodass Aufgrund der Gültigkeitsbereichskette können alle unabhängigen Ausführungsfunktionen auf diese Timervariable zugreifen. Und jetzt wird diese Timervariable nur einmal erstellt. Es ist eindeutig. Wir weisen dem Timer einfach weiterhin Werte zu, um ihn zu verzögern. Bei jeder Löschverzögerung wird die zuletzt definierte Verzögerung gelöscht. Dies entspricht mehreren Funktionen, die dieselbe externe Variable gemeinsam nutzen. const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); } Funktion Entprellung(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { Intervall löschen(Timer) Timer = setTimeout(_ => func(), Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Bezieht sich dies in diesem Code auf das Fenster? Durch den Rückruf ist die Laufzeit bereits unter Windows const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); konsole.log(dies); } Funktion Entprellung(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { Intervall löschen(Timer) Timer = setTimeout(_ => func(), Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Lösung Speichern Sie dies vor setTimeout. Diesmal zeigt dies auf die Schaltfläche. const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); konsole.log(dies); } Funktion Entprellung(Funktion, Verzögerung) { Timer einschalten // Diese Funktion wird nur zurückgegeben, wenn sie angeklickt wird. Dies ist also die Rückgabefunktion (), die auf die Schaltfläche { zeigt. lass Kontext = dies Intervall löschen(Timer) Timer = setzeTimeout(_ => { Funktion.apply(Kontext) }, Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Betrachten Sie das Parameterproblem und fügen Sie arg hinzu const btn = document.getElementById('btn') Funktion zahleGeld() { console.log('Geld bezahlen'); konsole.log(dies); } Funktion Entprellung(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { lass Kontext = dies let args = Argumente Intervall löschen(Timer) Timer = setzeTimeout(_ => { Funktion.apply(Kontext) Konsole.log(Kontext, Argumente); }, Verzögerung) } } btn.addEventListener('klicken', entprellen(Geld zahlen, 1000)) Drosselung
Scrolling-Bildschirm: Zählen Sie das Scrolling-Verhalten des Benutzers, um entsprechende Reaktionen auf die Webseite zu ermöglichen Wenn Benutzer weiter scrollen, werden weiterhin Anfragen generiert und die Anzahl der Anfragen steigt weiter an, was leicht zu einer Überlastung des Netzwerks führen kann. Wir können die Aufgabe sofort ausführen , wenn das Ereignis ausgelöst wird , und dann ein Zeitintervalllimit festlegen. Während dieser Zeit wird der Vorgang ignoriert, unabhängig davon, wie der Benutzer scrollt. Wenn nach Ablauf der Zeit ein Scroll-Verhalten des Benutzers erkannt wird, wird die Aufgabe erneut ausgeführt. Und stellen Sie das Zeitintervall ein Schreiben Sie zunächst einen Code , der die Seitengröße und die Hintergrundfarbe der Seite ändert Funktion Färbung() { sei r = Math.floor(Math.random() * 255) sei g = Math.floor(Math.random() * 255) sei b = Math.floor(Math.random() * 255) Dokument.Body.Style.Background = `rgb(${r}, ${g}, ${b})` } window.addEventListener('Größe ändern', Färbung) Funktion Drosselklappe(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { Timer = setzeTimeout(_ => { Funktion() }, Verzögerung) } } window.addEventListener('Größe ändern', Drosselung(Färbung, 2000)) Ermitteln Sie, ob das ausgelöste Ereignis innerhalb des Zeitintervalls liegt
Funktion Drosselklappe(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { // Dem Timer wird ein Wert zugewiesen. Gib ihn direkt zurück, d. h. führe die Aufgabe nicht aus, wenn (Timer) { zurückkehren } // Zu diesem Zeitpunkt wurde dem Timer noch kein Wert zugewiesen oder der Timer wurde ausgeführt // Weisen Sie dem Timer einen Wert für die verzögerte Ausführung zu timer = setTimeout(_ => { Funktion() // Nach der Verzögerungsausführung müssen wir den Wert des Timers löschen timer = null }, Verzögerung) } } window.addEventListener('Größe ändern', Drosselung(Färbung, 2000)) Lösen Sie diesen Punkt (obwohl das aktuelle Beispiel unter Windows ist) Funktion Drosselklappe(Funktion, Verzögerung) { Timer einschalten Rückgabefunktion () { lass Kontext = dies let args = Argumente // Dem Timer wird ein Wert zugewiesen. Gib ihn direkt zurück, d. h. führe die Aufgabe nicht aus, wenn (Timer) { zurückkehren } // Zu diesem Zeitpunkt wurde dem Timer noch kein Wert zugewiesen oder der Timer wurde ausgeführt // Weisen Sie dem Timer einen Wert für die verzögerte Ausführung zu timer = setTimeout(_ => { func.apply(Kontext, Argumente) // Nach der Verzögerungsausführung müssen wir den Wert des Timers löschen timer = null }, Verzögerung) } } window.addEventListener('Größe ändern', Drosselung(Färbung, 1000)) Drosselung des Kerns: Ereignisintervall Ein weiteres gängiges Zeitintervall ist die Verwendung des Date-Objekts Funktion Drosselklappe(Funktion, Verzögerung) { // Wir müssen mit dem vorherigen Zeitpunkt vergleichen, um festzustellen, ob das Zeitintervall abgelaufen ist. // Außerhalb der Rückgabefunktion, um eine automatische Änderung bei jeder Ausführung zu vermeiden. let pre = 0 Rückgabefunktion () { //Speichern Sie die Zeit, zu der die Funktion ausgeführt wird let now = new Date() // Zu Beginn wird es auf jeden Fall ausgeführt, wenn (now - pre > delay) { // Das Zeitintervall ist abgelaufen und die Funktion kann ausgeführt werden func() // Nach der Ausführung den Intervallpunkt zurücksetzen pre = now } } } window.addEventListener('Größe ändern', Drosselung(Färbung, 1000)) Parameterprobleme lösen Funktion Drosselklappe(Funktion, Verzögerung) { sei pre = 0 Rückgabefunktion () { lass Kontext = dies let args = Argumente lass jetzt = neues Datum() wenn (jetzt - vor > Verzögerung) { func.apply(Kontext, Argumente) vor = jetzt } } } window.addEventListener('Größe ändern', Drosselung(Färbung, 1000)) ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können! Das könnte Sie auch interessieren:
|
<<: Der Prozess zum Erstellen eines Jenkins-Projekts unter Linux (am Beispiel von CentOS 7)
>>: MySQL-Lernaufzeichnung: Blutiger Vorfall durch KEY-Partition verursacht
Inhaltsverzeichnis 1. Was ist JSON 1.1 Array-Lite...
PS: Ich habe kürzlich das Nginx-Kapitel von <&...
Standardmäßig läuft Docker über einen nicht verne...
beschreiben: Wenn die Tabs-Komponente hin- und he...
Heute möchte ich einen Countdown von Vue und Mome...
In diesem Artikelbeispiel wird der spezifische Co...
Wir alle wissen, dass Jmeter eine native Ergebnis...
In diesem Artikelbeispiel wird der spezifische Co...
Wenn Sie MySQL zum ersten Mal auf Ihrem Computer ...
Inhaltsverzeichnis Vorwort 1. Grundkenntnisse der...
Rufen Sie die Alibaba-Vektorsymbolbibliothek auf ...
Beispielcode: importiere java.util.Random; import...
Ergebnis: html <canvas id="Sternenfeld&qu...
Vorwort Beim Betrieb und der Verwaltung von Linux...
<br />Gestalten Sie Ihre Website wissenschaf...