Web プロジェクト開発 JS 機能の手ぶれ補正とスロットリングのサンプル コード

Web プロジェクト開発 JS 機能の手ぶれ補正とスロットリングのサンプル コード

安定

一般的なクラシックアプリケーション: アコーディオン効果

導入

手ぶれ補正機能のないウェブサイト:

ここに画像の説明を挿入

手ぶれ補正機能のあるウェブサイト:

画像の説明を追加してください

手ぶれ補正シーン1(マウスの動き込み)

ジッター: ユーザーはこのインタラクションをトリガーするつもりはありませんが、偶発的なマウスのジッターによりインタラクション イベントが誤ってトリガーされます。
例: 5枚目の写真を見たいです。 2 3 4 の写真は見たくないです。 しかし、マウスが最初の絵から 5 番目の絵にスライドしたとき、誤って 2 3 4 の上に止まってしまいました。誤ったトリガー。

機能アンチシェイク: ユーザーがイベントを連続して複数回トリガーした場合、最後のイベントのみが実行されます。

解決原理: タイマーをオンにします。間隔内にイベントが複数回トリガーされた場合は、そのたびに前のタイマーをクリアします。

例とソリューションコード:

<!DOCTYPE html>
<html lang="ja">
  <ヘッド>
    <メタ文字セット="UTF-8" />
    <title>アニメーション事例「アコーディオン」</title>
    <スタイル>
      * {
        マージン: 0;
        パディング: 0;
      }
      ul {
        リストスタイル: なし;
        幅: 2400ピクセル;
      }
      #箱 {
        幅: 1200ピクセル;
        高さ: 400px;
        境界線: 1px 実線の赤;
        マージン: 100px 自動;
        オーバーフロー: 非表示;
      }
      #ボックスli {
        幅: 100ピクセル;
        高さ: 400px;
        フロート: 左;
        遷移: すべて 0.5 秒のイーズアウト。
      }
      #ボックスli.over {
        幅: 800ピクセル;
      }
    </スタイル>
  </head>

  <本文>
    <div id="ボックス">
      <ul>
        <li v-for="(item,index) リスト内" :class="{over:overIndex == index}" @mouseenter="doEnter(index)">
            <img :src="item" alt="">
        </li>
      </ul>
    </div>
    <script src="./vue.js"></script>
    <スクリプト>
      アプリを新しいVue({
          el:'#ボックス',
          データ:{
              オーバーインデックス:0,
              リスト:[
                  './images/collapse/1.jpg',
                  './images/collapse/2.jpg',
                  './images/collapse/3.jpg',
                  './images/collapse/4.jpg',
                  './images/collapse/5.jpg',
              ]、
              時間ID:null
          },
          メソッド: {
              doEnter(インデックス){
                  /* 手ぶれ補正を有効にする*/
                  //1.1 最初に最後のタイマーをクリアし、この時間を参照として使用します clearTimeout(this.timeID)
                  //1.2 タイマーを開始する(手ぶれ補正間隔)
                  this.timeID = setTimeout(()=>{
                    this.overIndex = インデックス;
                  },500)
              }
          },
      })
    </スクリプト>
  </本文>
</html>

手ぶれ補正シーン2(キーボードのキー)

典型的な応用シナリオ: 関連語の検索
- 開発中、この機能のバックエンドはミドルウェア「OpenSearch」または「Elasticsearch」を使用し、バックエンドのロジック処理は非常に効率的かつ高速になります。
-これはフロントエンドの観点に基づいており、HTTPリクエストを削減するという観点から最適化されています。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <meta http-equiv="X-UA-compatible" content="ie=edge">
    <title>ドキュメント</title>
</head>
<本文>
    <input type="text" placeholder="検索内容を入力してください">
    <スクリプト>
        timeID = null とします。
        document.querySelector('input').oninput = function(){
            /* 手ぶれ補正機能 */
            //(1) まず前回のタイマーをクリアするclearTimeout(timeID)
            //(2) 手ぶれ補正タイマーを有効にする timeID = setTimeout(() => {
                console.log( this.value );
            }, 500);
        }
    </スクリプト>
</本文>
</html>

関数のスロットリング

コンセプト: 高頻度イベントによって発生するパフォーマンスの問題を解決します。高頻度イベント: ページ内で、一部のイベントが非常に頻繁にトリガーされます。
たとえば、マウスの動き、スクロールホイールのイベントなどです。

解決策: ユーザーがイベントを連続して複数回トリガーした場合、指定された時間内にイベントは 1 回だけトリガーされます。

例とソリューションコード:

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <meta http-equiv="X-UA-compatible" content="ie=edge">
    <title>ドキュメント</title>
    <スタイル>
        体{
            高さ: 3000ピクセル;
        }
    </スタイル>
</head>
<本文>
    <スクリプト>
        lastTime を null にします。
        
        i = 1 とします。
        window.onmousemove = 関数(){
            /* 関数のスロットリング */
            //(1) 2つのトリガーイベント間の時間間隔を決定する let time = Date.now()
            if( 時間 - 最終時刻 >= 500 ){
                console.log('マウスの移動回数: ' + i++);
                //(2) このトリガー時刻は次の参照間隔として使用されます lastTime = time
            }
        }
        // j = 1 とします。
        // window.onscroll = function(){
        // //(1) 2つのトリガーイベント間の時間間隔を決定する// let time = Date.now()
        // if( 時間 - lastTime >= 500 ){
        // console.log('マウスのスクロール回数: ' + j++);
        // //(2) このトリガー時刻は次回の参照間隔として使用されます // lastTime = time
        // }   
        // }
    </スクリプト>
</本文>
</html>

上記は、Web プロジェクト開発における JS 機能の手ぶれ防止とスロットリングのサンプル コードの詳細です。Web プロジェクトにおける JS 機能の手ぶれ防止とスロットリングの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JavaScript の手ぶれ補正機能の分析
  • JS 手ぶれ補正機能の実装と使用シナリオ
  • JS 関数のアンチシェイクと関数スロットリングを理解する方法
  • JavaScript スロットリングと手ぶれ補正機能についての簡単な説明
  • JavaScript 関数のアンチシェイクとスロットリングの簡単な分析
  • JavaScript における手ぶれ補正とスロットリング機能の詳細な説明

<<:  MySQLはgroup_concat()関数に基づいて複数のデータ行を結合します

>>:  Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

推薦する

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

シンプルで簡単なJavaScript開発のためのSvelte実装原理の詳細な説明

目次デモ1フラグメントの作成スヴェルトコンポーネント状態を変更できるデモSvelte は長い間存在し...

ReactでのDOM操作の実装

目次前の単語使用シナリオ参照HTML要素クラスコンポーネント機能コンポーネント[DOMノードを親コン...

Linuxの運用と保守の基本プロセス管理と環境構成分析

目次1. プロセスの基本的な概要2. プロセスの構成要素3. プロセス環境4. プロセスステータス5...

VMwareでCentOSがインターネットにアクセスできない問題を素早く解決

昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...

Javascript における非同期待機の詳細な理解

この記事では、async/await がすべての JavaScript 開発者にとって非同期プログラ...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

Docker+Nginx を使ってシングルページアプリケーションをデプロイする

開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...

Vueプロジェクトの支払い機能コードの詳細な説明

1. Alipay方式: Alipay メソッド: Alipay をクリックして支払い、バックエンド...

MySQLのタイムゾーンを表示および設定する方法

1. データベースのタイムゾーンを確認する '%time_zone' のような変数を...

MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例

MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例最近のプロ...

MySQL truncate table ステートメントの使用

Truncate table ステートメントは、テーブル内のすべてのデータを削除/切り捨てるために使...

ツリー チャートの実装方法に関する Echarts チュートリアル

ツリーマップは主にツリーのようなデータ構造を視覚化するために使用され、特殊なタイプの階層です。これを...

イメージを再構築せずにDockerにポートを動的に追加する方法

操作中に Docker コンテナの公開ポートを変更または追加する必要がある場合がありますが、実行中の...