1. 関数デバウンス1. 画像安定化とは何ですか?
指定された時間内にイベントがトリガーされない場合は、イベント処理関数が呼び出されます。 次の例がこれを示しています。 /* 手ぶれ防止関数を定義* func: イベントが連続的にトリガーされなくなったときに呼び出される関数を渡す* delay: 渡されたコールバック関数の実行にかかる時間を定義する* */ 関数デバウンス(func,delay) { let timer = null // タイマーの保存に使用 return function (...args) { // タイマーが存在する場合は、タイマーをクリアしてからリセットします if(タイマー !== null) clearTimeout(タイマー) timer = setTimeout(func, delay) // 遅延を超えると、ここで func が呼び出され、イベントを受け取ります。必要に応じて、func の this ポインタを変更できます。timer は外部への参照を持っているため、破棄されません。} } /*イベント処理関数*/ 関数testDeBounce(){ console.log('何回実行しましたか?') } // debounce によって返された関数を受け取る const temp = debounce(testDeBounce(),1000) /*イベントをバインドし、手ぶれ補正機能をテスト*/ window.addEventListener('スクロール',()=>{ 温度() }); // これはイベント ハンドラを少なくとも 1 回呼び出し、最大で次の回数以上実行されることはありません。window.addEventListener('scroll', testDeBounce); // このように記述すると、ページがスクロールするたびにイベント ハンドラが呼び出されます。 アイデアを要約すると次のようになります。
2. 関数のスロットリング
関数スロットルの実装方法:タイマー、タイムスタンプ、タイマー + タイムスタンプ。 2.1 タイマーの実装アイデア:
/* * タイマースロットル関数を定義します * func: 着信イベント処理関数 * delay: タイマーコールバックは、delay で指定された時間内に無効になります * */ 関数スロットル(func,delay) { タイマーを null にする const コンテキスト = this 関数(...引数)を返す{ // タイマーが存在しない場合は if(!timer){ タイマー = setTimeout(()=>{ func.apply(context,args) // 返された関数呼び出しの環境を考慮するため、ここでは直接使用されません timer = null // delay 後にタイマーをクリアします},delay) } } } 関数テスト() { console.log('ああああ!') } 定数 temp = スロットル(テスト,1000) document.querySelector('button').addEventListener('click',()=>{ 温度() }) 2.2 タイムスタンプの実装var スロットル = 関数(func, 遅延) { var prev = Date.now(); 関数()を返す{ var コンテキスト = this; var args = 引数; var now = Date.now(); if (現在 - 前回 >= 遅延) { func.apply(コンテキスト、引数); prev = Date.now(); } } } 関数ハンドル() { コンソールにログ出力します。 } window.addEventListener('スクロール'、スロットル(ハンドル、1000)); 2.3 タイムスタンプ + タイマー// スロットル コード (タイムスタンプ + タイマー): var スロットル = 関数(func, 遅延) { var タイマー = null; var startTime = Date.now(); 関数()を返す{ var curTime = Date.now(); var 残り時間 = 遅延 - (現在時刻 - 開始時刻); var コンテキスト = this; var args = 引数; タイマーをクリアします。 残り <= 0 の場合 func.apply(コンテキスト、引数); 開始時刻 = Date.now(); } それ以外 { タイマー = setTimeout(func, 残り時間); } } } 関数ハンドル() { コンソールにログ出力します。 } window.addEventListener('スクロール'、スロットル(ハンドル、1000)); JavaScript の手ぶれ補正とスロットリングについての記事はこれで終わりです。JavaScript の手ぶれ補正とスロットリングについての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL データベース JDBC プログラミング (Java は MySQL に接続します)
>>: 小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明
1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...
最近、開発プロセス中に、プロジェクト開発環境に接続されている MySQL データベースは Aliba...
ブロック要素p - 段落テキストの事前フォーマットテーブルol - ソートフォームul - 順序なし...
ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...
長い間ウェブサイトを作ってきましたが、入力時のnameとidの違いがまだわかりません。最近jQuer...
目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...
前回の記事では、Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決...
目次1. 現在のデータベース内のテーブルを表示する2. テーブルを作成する3. 指定されたテーブル構...
この記事では、参考までにMySQL 8.0.19 winx64のインストールチュートリアルを紹介しま...
目次質問伸ばす問題を解決する要約する質問プロジェクトの要件に従って、以下の州地図で個々の都市を(異な...
特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...
目次1. MySQLレプリケーション関連の概念2. シンプルな1マスター1スレーブアーキテクチャの実...
CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...
目次1. はじめに2. 最初の方法3. 2番目の方法要約する1. はじめにVue プロジェクトの開発...
パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...