Vue2.x - アンチシェイクとスロットリングの使用例

Vue2.x - アンチシェイクとスロットリングの使用例

ユーティリティ:

// 手ぶれ防止エクスポート const debounce = (func, wait = 3000, immediate = true) => {
 タイムアウトを null にします。
 関数()を返す{
  コンテキストを this とします。
  args = 引数とします。
  if (timeout) clearTimeout(timeout);
  if (即時) {
   var callNow = !timeout; //最初のクリックは true、時間内の 2 回目のクリックは false、時間切れになると最初のクリックが繰り返されます timeout = setTimeout(() => {
    タイムアウト = null;
   }, wait); //タイマーID
   if (callNow) func.apply(context, args);
  } それ以外 {
   タイムアウト = setTimeout(関数() {
    func.apply(コンテキスト、引数);
   }、 待って);
  }
 };
};
// タイムスタンプスキームエクスポート const throttleTime = (fn, wait = 2000) => {
 var pre = Date.now();
 関数()を返す{
  var コンテキスト = this;
  var args = 引数;
  var now = Date.now();
  if (now - pre >= wait) {
   fn.apply(コンテキスト、引数);
   pre = Date.now();
  }
 };
};
// タイマーソリューション export const throttleSetTimeout = (fn, wait = 3000) => {
 var タイマー = null;
 関数()を返す{
  var コンテキスト = this;
  var args = 引数;
  if (!タイマー) {
   タイマー = setTimeout(関数() {
    fn.apply(コンテキスト、引数);
    タイマー = null;
   }、 待って);
  }
 };
};

vue での使用:

<テンプレート>
 <div class="main">
  <p>手ぶれ補正はすぐに実行されます</p>
  <button @click="click1">クリック</button>

  <br />

  <p>手ぶれ補正はすぐには行われません</p>
  <button @click="click2">クリック</button>

  <br />

  <p>スロットリング タイムスタンプ スキーム</p>
  <button @click="click3">クリック</button>

  <br />

  <p>スロットル タイマー ソリューション</p>
  <button @click="click4">クリック</button>
 </div>
</テンプレート>

<スクリプト>
'./utils' から { debounce、throttleTime、throttleSetTimeout } をインポートします。
エクスポートデフォルト{
 メソッド: {
  クリック1: デバウンス(
   関数() {
    console.log('手ぶれ補正はすぐに実行されます');
   },
   2000年、
   真実
  )、
  クリック2: デバウンス(
   関数() {
    console.log('手ぶれ補正はすぐには実行されません');
   },
   2000年、
   間違い
  )、
  クリック3: スロットルタイム(関数() {
   console.log('スロットルタイムスタンプスキーム');
  })、
  クリック4: スロットル設定タイムアウト(関数() {
   console.log('スロットルタイマースキーム');
  })
 },
};
</スクリプト>

<スタイル スコープ lang="scss">
* {
 マージン: 0;
 フォントサイズ: 20px;
 ユーザー選択: なし;
}
。主要 {
 位置: 絶対;
 左: 50%;
 変換: translateX(-50%);
 幅: 500ピクセル;
}
ボタン {
 下部マージン: 100px;
}
</スタイル>

説明する:

画像安定化:

即時実行バージョン: 即時が true の場合、コマンドは最初にクリックされたときに実行され、再度クリックされても実行されません。待機時間が終了すると、次のクリックが有効になり、最初の 1 回のみ実行されます。

原理:

最初にクリックすると、timeoutID が存在せず、callNow が true であるため、対象コードがすぐに実行されます。 2 回目にクリックすると、timeoutID が存在し、callNow が false であるため、対象コードは実行されません。 待機時間が終了すると、timeoutID が null に設定され、即時実行ロジックが繰り返されます。

即時実行しないバージョン:immediate が false の場合、最初のクリックは実行されません。待機時間が経過した後に有効になります。つまり、何回クリックしても、最後のクリック イベントのみが実行されます。

原理:

setTimeout を使用してイベントの実行を遅らせます。複数回トリガーされた場合は、最後に実行されたコードを clearTimeout してタイミングを再開します。タイミング中にイベントがトリガーされない場合は、対象コードを実行します。

スロットル:

イベントが連続してトリガーされた場合、待機頻度で対象コードを実行します。

効果:

上記は、Vue2.x-anti-shake と throttling の使用例の詳細です。vue anti-shake と throttling の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue コンポーネントでのアンチシェイクとスロットリングの使用例の分析
  • Vue で手ぶれ補正とスロットリングを使用する方法
  • Vue 関数のアンチシェイクとスロットリングの正しい使用方法
  • VUEの手ぶれ補正とスロットリングの簡単な分析
  • Vue で lodash を使用してイベントのシェイクとスロットルを解除する
  • Vue で手ぶれ補正とスロットリングを使用する方法

<<:  Linuxでテキスト比較を実現するコツを教えます

>>:  mysql バッチで大量のデータを削除する

推薦する

ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?

FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

シンプルな虫眼鏡効果を実現するJavaScript

大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウス...

React NativeプロジェクトでLottieアニメーションを使用する方法

Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...

VMWare で Ubuntu を再起動した後、インターネットにアクセスできなくなる問題の解決方法

VMWareでUbuntuを再起動した後、インターネットにアクセスできなくなる問題を解決するには、次...

XHTML でのハイパーリンク タグの使用に関するチュートリアル

ハイパーリンク。「リンク」とも呼ばれます。ハイパーリンクは、私たちが閲覧する Web ページのいたる...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

1つの記事でJavaScriptのクロージャ関数について学ぶ

目次変数のスコープ閉鎖の概念クロージャの使用クロージャのデメリット最後に、クロージャのメリットとデメ...

Docker ケース分析: Redis サービスの構築

目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...

H5でクリックされたときにaタグの背景色をキャンセルする方法

1. モバイル端末でクリックされたときにタグの青色を解除する { -webkit-tap-highl...

mysql-5.7.21-winx64 無料インストール版のインストール - Windows チュートリアル詳細説明

1 ダウンロードアドレスは https://dev.mysql.com/downloads/mysq...

モバイルでのHTML5経由のファイルアップロード

ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても...

Django がローカル MySQL データベースに接続する手順 (pycharm)

ステップ1:setting.pyでデータベースを変更する # データベースを構成する DATABAS...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...

CSS を使用して画像の色を変更する 100 の方法 (収集する価値あり)

序文「画像処理というと、PhotoShop などの画像処理ツールを思い浮かべることが多いです。フロン...