JavaScript の手ぶれ補正とスロットリングの詳細な説明

JavaScript の手ぶれ補正とスロットリングの詳細な説明

デバウンス

定義: スクロール イベントなど、短時間に連続してトリガーされるイベントの場合、アンチシェイクとは、イベント処理機能が一定の制限時間内に 1 回だけ実行されることを意味します。

手ぶれ防止については、指でバネを押すことを例に挙げてみましょう。指でバネを押し、押し続けます。指を離すまでバネは跳ね返りません。

サイズ変更の例:

関数デバウンス(fn, wait){
    var タイマー = null;
    戻り値 () =>{
        if(タイマー !== null){
            タイマーをクリアします。
        }
        タイマー = setTimeout(fn, wait);
    }
}
関数ハンドル(){
    コンソールにログ出力します。
}
window.addEventListener("resize",debounce(handle, 1000));

上記は即時実行版ではない

即時実行バージョン

関数デバウンス(fn, wait){
	timeid、flag = true とします。
	戻り値 () => {
		タイムアウトをクリアします(timeid);
		if(フラグ){
			関数fn();
			フラグ = false;
		}それ以外{
			タイムID = setTimeout(()=>{
				フラグ = true;
			}、 待って);
		}
	}
}

ブラウザ ウィンドウをドラッグするとサイズ変更がトリガーされますが、この時点ではハンドル関数はトリガーされません。タイマーがカウントを開始します。タイミング時間内にサイズ変更が再度トリガーされると、タイマーが再び開始されます。これの利点は、ブラウザ ウィンドウをドラッグしてサイズ変更をトリガーすると、ハンドル関数が頻繁に実行されず、必要なときにのみ実行されるため、冗長性が効果的に排除されることです。

一般的な書き方:

const デバウンス = (func, 遅延 = 200) => {
  タイムアウト = null にする
  関数を返す(){
    clearTimeout(タイムアウト)
    タイムアウト = setTimeout(() => {
      func.apply(これ、引数)
    }、 遅れ)
  }
}

スロットル

定義: 一定期間内にイベントを 1 回だけ実行します。

本来の意図は、蛇口から滴り落ちる水のように、指定された時間内に 1 回だけ実行し、頻繁な繰り返し実行を減らすことです。

検索ボックスの入力イベントなど。

タイムスタンプで計算:

関数スロットル(fn,wait){
  startTime を 0 にします。
  関数()を返す{
    endTime を Date.now() とします。
    if(終了時間-開始時間>待機){
      関数fn();
      開始時間 = 終了時間;
    }
  }
}

タイマー別:

関数スロットル(fn,wait){
  timeid = null とします。
  関数()を返す{
    if(!timeid){
       timeid = setTimeout(関数(){
         関数fn();
         タイムID = null;
       }、待って)
    }
  }
}

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript の手ぶれ補正機能の分析
  • JavaScriptのアンチシェイクとスロットリングとは
  • JavaScript スロットリングとアンチシェイクに関する簡単な説明
  • JavaScript の手ぶれ補正とスロットリングの説明
  • JavaScript のアンチシェイクとスロットリングについてご存知ですか?

<<:  Docker のタイムゾーンの問題とデータ移行の問題

>>:  XHTML チュートリアル: 初心者のための XHTML の基礎

推薦する

JavaScript でじゃんけんゲームを書く

この記事では、JavaScriptでじゃんけんゲームを書くための具体的なコードを参考までに紹介します...

Docker で Node.js をデプロイする方法

序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...

Linuxでファイルを削除してもスペースが解放されない問題の対処方法

問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...

Linux lseek関数の使い方の詳しい説明

注:記事に誤りがある場合は、メッセージを残して指摘してください。ご協力ありがとうございます。名前名前...

MySql バッチに挿入するときにデータの重複を避ける方法

目次序文1. ignore を挿入2. 重複キーの更新時3. を置き換える要約する序文Mysql は...

Mapper SQL ステートメント フィールドとエンティティ クラス属性名の関係は何ですか?

背景: 1. データベースに通知テーブルがある あなたは見ることができますgmt_create、通知...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

MySQL B-Tree インデックスの簡単な分析

Bツリーインデックス異なるストレージ エンジンでは、異なるストレージ構造を使用する場合もあります。た...

Dockerはmysqldumpコマンドを使用してプロジェクト内のmysqlデータをバックアップおよびエクスポートします。

mysqldump コマンドはじめに: データベースバックアッププログラム形式: mysqldum...

特定の MySQL テーブルの完全データと増分データをメッセージ キューに同期する - ソリューション

目次1. 当初の需要2. 解決策3. 運河の導入と設置運河の仕組み建築インストール4. 検証1. 当...

CSS で適応型ディバイダーを巧みに実装する N 通りの方法

分割線はウェブページでよく使われるデザインです。例えば、Zhihuのその他の回答をご覧ください。 こ...

mysql8.0.11クライアントがログインできない問題の解決方法

この記事では、mysql8.0.11クライアントがログインできない問題の解決策を紹介します。参考まで...

MySQL でテーブル データを削除した後もディスク領域がまだ占有されているのはなぜですか?

目次1.MySQLデータ構造2. テーブルファイルのサイズは変更されておらず、MySQLの設計に関連...

MySQL 8.0.19 インストール詳細チュートリアル (Windows 64 ビット)

目次MySQLを初期化するMySQL サービスをインストール + MySQL サービスを開始MySQ...

現在のマウススライドの座標を取得するVue+openlayer5メソッド

序文: Vue プロジェクトで現在のマウスの座標を取得するにはどうすればよいでしょうか。ここで共有す...