Vue で手ぶれ補正とスロットリングを使用する方法

Vue で手ぶれ補正とスロットリングを使用する方法

序文

ムービー プロジェクトでは、ページを切り替えてから現在のムービー リスト ページに戻るとムービー データの最初の部分に戻ってしまうことを防ぐために、ムービー リスト内のドロップダウンの現在の位置を保存したいと考えています。

このとき、少しスライドするたびに現在の位置を保存するのではなく、一定時間ごとに 1 回保存するようにします。このとき、手ぶれ補正とスロットリングを使用できます。

コンセプト

簡単に言えば、手ぶれ補正はタイマーを使用して目的を達成することです。

デバウンス:

コールバックはイベントがトリガーされてから n 秒後に実行されます。n 秒以内に再度トリガーされた場合は、タイミングが再開されます。

典型的な例は入力ボックス検索です。入力が完了してから n 秒後に検索要求が行われ、n 秒以内にさらにコンテンツが入力されると時間がリセットされます。

スロットル:

機能は単位時間内に 1 回のみ起動できると規定されています。この単位時間内に機能が複数回起動された場合、そのうち 1 つだけが有効になります。

典型的なケースとしては、マウスを連続的にクリックしてトリガーし、n 秒以内に複数回クリックしても 1 回しか有効にならないように規定されています。

安定

意味

頻繁な操作はジッターを防ぎます。操作後 n 秒以内に操作が行われない場合、イベントがトリガーされます。操作が継続すると、タイミングがリセットされます。

使用シナリオ

  • 入力ボックス入力
  • サイズ変更

コード

// ユーティリティ.js
// 即時: 関数の実行をすぐに開始するかどうか debounce(func, delay = 300, immediate = false) {
    タイマーを null にする
    関数()を返す{
        if (タイマー) {
            タイムアウトをクリア(タイマー)
        }
        if (即時 && !タイマー) {
            func.apply(これ、引数)
        }
        タイマー = setTimeout(() => {
         func.apply(これ、引数)
        }、 遅れ)
    }
}

Vueでの使用

方法1: パブリックメソッドutilsに記述して導入する

'utils' から { debounce } をインポートします
メソッド: {
    appSearch:debounce(function(e.target.value){
        this.handleSearch(値)
    }, 1000),
    ハンドル検索(値) {
        console.log(値)
    }
}

方法2: 現在のvueファイルに書き込む

データ: () => {
  戻る {
    デバウンス入力: () => {}
  }
},
メソッド: {
  showApp(値) {
    console.log('値', 値)
  },
  デバウンス(func, 遅延 = 300, 即時 = false) {
    タイマーを null にする
    関数()を返す{
        if (タイマー) {
            タイムアウトをクリア(タイマー)
        }
        if (即時 && !タイマー) {
            func.apply(これ、引数)
        }
        タイマー = setTimeout(() => {
         func.apply(これ、引数)
        }、 遅れ)
    }
  }
},
マウント() {
  this.debounceInput = this.debounce(this.showApp, 1000)      
},

スロットリング

意味

頻繁な操作は関数の実行を薄めます。頻繁な操作が発生すると、関数は n 秒ごとに 1 回だけトリガーされます。

使用シナリオ

  1. マウスクリック、マウスダウン、マウス移動は単位時間あたり1回だけ実行されます。
  2. スクロールイベント、遅延読み込み、スクロール読み込み、さらに読み込み、またはスクロールバーの位置の監視
  3. 頻繁なクリック送信やフォームの繰り返し送信を防ぐ

コード

// ユーティリティ.js
関数スロットル(関数、遅延 = 300){    
    前 = 0 とする
    関数()を返す{
        now = Date.now() とします。
        if ((現在 - 前回) >= 遅延) {
            func.apply(これ、引数)
            prev = Date.now()
        }
    }
}

Vueでの使用

使い方は手ぶれ補正と同じ

要約する

Vue での手ぶれ補正とスロットリングの使用に関するこの記事はこれで終わりです。Vue の手ぶれ補正とスロットリングの使用に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  Linuxの相対パスと絶対パスの使用

>>:  Win7 インストール MySQL 5.6 チュートリアル図

推薦する

ローカル写真をアップロードする前にプレビューコード例を実装するための HTML5 と jQuery

HTML5 と jQuery はアップロード前にローカル画像のプレビューを実装しており、その効果は...

DockerコンテナのIPアドレスを取得する方法の詳細な説明

1.コンテナに入った後 /etc/hosts を cat するコンテナ自体の IP アドレスと (-...

MySQLフィルタリングレプリケーションのアイデアの詳細な説明

目次mysql フィルター レプリケーションメインデータベースに実装ライブラリから実装いくつかの質問...

Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

効果使用する場合は、コードとスタイルを自分で最適化してください。画像を表示しない/ビデオとオーディオ...

Mysql接続数の設定と取得方法

接続数を取得する --- 最大接続数を取得します。SHOW VARIABLES LIKE '...

JavaScript関数導入の詳しい説明

目次機能紹介関数関数の作成コンストラクタは関数を作成する関数宣言は関数を作成する関数式関数を作成する...

曇り空のアイコン効果を実現する純粋な CSS

効果効果は以下のとおりです​実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...

ウェブページの画像を素早く表示する方法とテクニック

1. .jpg ではなく .gif を使用します。GIF は JPG に比べてサイズが小さくなります...

マークアップ言語 - Web アプリケーション CSS スタイル

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要

序文最近、古いプロジェクトから残ったいくつかの SQL 最適化の問題に対処するのに忙しくしています。...

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

npm 淘宝ミラー変更説明

1. トップレベルの使用法1. cnpmをインストールする npm i -g cnpm --regi...

Linuxはバイナリモードを使用してmysqlをインストールします

この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...

写真とテキストによる MySQL と sqlyog のインストール チュートリアル

1. MySQL 1.1 MySQLのインストールmysql-5.5.27-winx64 ダウンロー...