ホームページ > 記事 > ウェブフロントエンド > JavaScript トピック 4: スロットル
#目次
(無料学習の推奨事項: JavaScript ビデオ チュートリアル )
序文
スロットリング、つまり別の最適化関数のアイデアについて話しましょう。 モバイル イベントを例に挙げてみましょう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>効果は次のとおりです:
1. コアおよび基本実装##スロットリングの原理は非常に単純です。
イベントを継続的にトリガーする場合、そのイベントは特定の時間間隔内に 1 回だけ実行されます。スロットリングの実装に関しては、次の 2 つの主流の実装方法があります。
タイムスタンプのアイデア
;
(最初の値は 0)
prev の場合、時間間隔のメンテナンスが終了したことが証明され、指定されたイベントが実行され、
prev
によると更新されます。このアイデアに基づいて、コードの最初のバージョンを実装できるようになりました: <pre class="brush:php;toolbar:false">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; // 更新上一次触发的时间
}
}}</pre>
それを使ってどのような効果が得られるか見てみましょう: マウスが移動すると、 イベントがすぐに実行されます
1 秒ごとに 1 回実行され、実行されます2.5 秒間の移動後に 2 回、つまりアクション期間
内にあるかどうかを記録します;
wait time その後、再度実行してタイマーをクリアします。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
一定の間隔を置いてから一度実行されます
|
"開始点" | すぐに実行 |
---|---|---|
"終了点" | 停止後は実行されません | Stop は再度実行されます |
2. スロットルの進歩 | 2 つの組み合わせ完了するためのアイデアはすぐに実行でき、トリガーを停止した後に再度実行するスロットル メソッド: |
コードを見ながら、繰り返し印刷してみました。なぜこれを行うのかを理解できるのはデータだけです。頑張りましょう~ 関連する無料学習の推奨事項:
javascript
(ビデオ)
以上がJavaScript トピック 4: スロットルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。