Heim > Artikel > Web-Frontend > JavaScript-Thema 4: Drosselung
Inhaltsverzeichnis
Javascript-Video-Tutorial )
VorwortReden wir über Throttling – die Idee einer weiteren Optimierungsfunktion.
Nehmen wir das mobile Event
nbsp;html> <meta> <meta> <meta> <title>Document</title> <style> #wrapper { width: 100%; height: 140px; background: rgba(0, 0, 0, 0.8); color: #fff; font-size: 30px; font-weight: bold; line-height: 140px; text-align: center; } </style> <p></p> <script> var count = 1; function moveAction () { oWrapper.innerHTML = count++; } var oWrapper = document.querySelector('#wrapper'); oWrapper.onmousemove = moveAction; </script>
Der Effekt ist wie folgt:
1. Kern- und GrundimplementierungDas Prinzip der Drosselung ist ganz einfach:
Wenn Sie weiterhin ein Event auslösen , ein bestimmtes Innerhalb des Zeitintervalls wird es nur einmal ausgeführt.In Bezug auf die Implementierung der Drosselung gibt es zwei gängige Implementierungsmethoden:
Zeitstempel-Idee
now
heraus now
;prev
;now - prev > wait
,证明时间区间维护结束,执行指定事件,更新prev
;根据这一思路,我们就可以实现第一版代码了:
oWrapper.onmousemove = throttle(moveAction, 1000);function throttle(func, wait) { var _this, arg; var prev = 0; // 上一次触发的时间,第一次默认为0 return function () { var now = Date.now(); // 触发时的时间 _this = this; if (now - prev > wait) { func.apply(_this, arg); // 允许传入参数,并修正this prev = now; // 更新上一次触发的时间 } }}
来看看借助它,效果是什么样的:
我们可以看到:
利用定时器来保证间隔时间内事件的触发次数
timer
,记录当前是否在周期内;wait
时间之后再次执行,并清掉定时器;当触发事件的时候,我们设置一个定时器,再触发事件的时候,如果定时器存在,就不执行,直到定时器执行,然后执行函数,清空定时器,这样就可以设置下个定时器。
function throttle(func, wait) { var _this, arg; var timer; // 初始化 return function () { _this = this; // 记录this arg = arguments; // 记录参数数组 if (timer) return; // 时候未到 timer = setTimeout(() => { func.apply(_this, arg); // 允许传入参数,并修正this timer = null; }, wait); }}
来看看借助它,效果是什么样的:
但是,我们可以看到:
wait
Ausführungprev
;now - prev > ist, wird bewiesen, dass die Zeitintervallwartung beendet ist, das angegebene Ereignis ausgeführt und <code>prev
;
Mal sehen, wie der Effekt damit ist: |
Wir sehen: | |
---|---|---|
Es wird alle 1 Sekunde einmal ausgeführt, und die Bewegung wird innerhalb von 2,5 Sekunden zweimal ausgeführt, was bedeutet, dass die Aktion | nach dem Stoppen nicht erneut ausgeführt wird.1.2 Timer-Idee | |
Erstellen Sie einen Timer | Zeitraums liegt Beurteilen Sie den Timer. Wenn er existiert, wird er sofort beendet. Andernfalls wird das Ereignis ausgeführt. |
wait wird nach Ablauf der Zeit erneut ausgeführt und der Timer wird gelöscht | Wenn das Ereignis ausgelöst wird, stellen wir einen Timer ein. Wenn ein Ereignis ausgelöst wird und ein Timer vorhanden ist, wird es erst dann ausgeführt, wenn der Timer ausgeführt wird. Anschließend wird die Funktion ausgeführt, um den Timer zu löschen, damit die Der nächste Timer kann eingestellt werden.
Wir können jedoch Folgendes sehen:
Wenn die Maus nach innen bewegt wird, wird das Ereignis nicht sofort ausgeführt. Nachdem die Maus angepasst wurde, wird es nach dem Warten Intervall Einmal1.3 Der Unterschied zwischen den beiden Ideen🎜🎜"Startpunkt"🎜🎜Sofort ausführen🎜 🎜n Sekunden später🎜 🎜🎜🎜"Ende" 🎜🎜Es wird nach dem Stoppen nicht ausgeführt 🎜🎜Es wird nach dem Stoppen erneut ausgeführt 🎜🎜🎜🎜🎜🎜 2. Drosselungsfortschritt🎜🎜🎜Zwei Ideen kombiniert, um eine Drosselungsmethode zu vervollständigen, die sein kann wird sofort ausgeführt und nach dem Auslösen des Stopps erneut ausgeführt:🎜rrreee🎜Der Effekt wird wie folgt demonstriert:🎜🎜🎜🎜🎜Als ich mir den Code ansah, musste ich die Daten wiederholt ausdrucken, bevor ich verstand, warum es getan wurde. Lasst uns zusammenarbeiten~🎜🎜🎜🎜Verwandte kostenlose Lernempfehlungen: 🎜🎜🎜Javascript🎜🎜 🎜(Video)🎜🎜🎜ZeitstempelTimer
Das obige ist der detaillierte Inhalt vonJavaScript-Thema 4: Drosselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!