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 構成とローカル静的リソースへのアクセスの実装

推薦する

hr 水平線スタイルの例コード

コードをコピーコードは次のとおりです。 <hr style="width:490px...

Dockerコンテナが停止できない問題の解決方法

解決策は次のとおりです。 1. コンテナを強制削除する docker rm -f ジェンキンス2. ...

Excel をインポートするときに js で時間を変換する正しい方法について

目次1. 基本2. 問題の説明3. 解決策付録: js を使用して Excel の日付形式を変換する...

AngularでTweenMaxアニメーションライブラリを使用する際の問題と解決策

最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...

React refsの詳細な紹介

1. 何ですかRefs 、コンピューターでは Resilient File System (ReF...

Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

目次解決された主な問題1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になり...

Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順

1. [admin@JD ~]$ cd opt #ルートディレクトリにoptと入力2. [admin...

JavaScript strictモードの概要 strictを使用する

目次1. 概要1.1 厳密モードとは何ですか? 1.2 厳密モードの目的2. 厳密モードを有効にする...

HTML 編集の基礎 (初心者必読)

DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...

Vueリストレンダリングキーの原理と機能の詳細な説明

目次リストレンダリングキーの原理と機能主要原則の分析キーの役割要約するリストレンダリングキーの原理と...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

JavaScriptはパスワードボックスの検証情報を実装します

この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...

Webフロントエンド開発経験の概要

XMLファイルは、可能な限りutf-8でエンコードする必要があります。gb2312には、?など、保存...

...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...