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

推薦する

Vue3 + TypeScript 開発の概要

目次Vue3 + TypeScript 学習1. 環境設定1.1 最新のVue scaffoldin...

CSS floatプロパティの詳細な説明

1. フローティングとは何ですか?フローティングは、その名の通り、浮遊することを意味します。要素がド...

モバイルページで縦画面を強制する方法

最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...

Linux でのデータベースのスケジュールバックアップの実装スクリプト

目次シナリオ: サーバーデータベースを毎日定期的にバックアップする必要がある1. まずバックアップス...

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

光るテキストとちょっとしたJS特殊効果を実現するCSS

実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...

Vue プロジェクトに ECharts を導入する

目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

Vueは開始時間と終了時間の範囲クエリを実装します

この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...

Vue で v-for を更新する方法

ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...

Ubuntu で nginx を使用して WebDAV ファイル サーバーを構築する詳細なプロセス

nginxをインストールするnginx-fullをインストールする必要があることに注意してください。...

CSS の高さの崩壊問題の解決

1. 崩壊度が高いドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つ...

HTMLのセマンティクスといくつかの簡単な最適化についての簡単な説明

1. セマンティゼーションとは何ですか? Bing辞書の説明セマンティクス化とは、適切な HTML ...

Hadoop 3.2.0 クラスターの構築に関する一般的な考慮事項

1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...

ウェブサイトデザインの基礎知識:初心者の方はぜひお読みください

今では多くの人がウェブサイト作成に参加していますが、ウェブサイトはどのように作成すればよいのでしょう...