安定一般的なクラシックアプリケーション: アコーディオン効果 導入手ぶれ補正機能のないウェブサイト: 手ぶれ補正機能のあるウェブサイト: 手ぶれ補正シーン1(マウスの動き込み)ジッター: ユーザーはこのインタラクションをトリガーするつもりはありませんが、偶発的なマウスのジッターによりインタラクション イベントが誤ってトリガーされます。 機能アンチシェイク: ユーザーがイベントを連続して複数回トリガーした場合、最後のイベントのみが実行されます。 解決原理: タイマーをオンにします。間隔内にイベントが複数回トリガーされた場合は、そのたびに前のタイマーをクリアします。 例とソリューションコード: <!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(キーボードのキー)典型的な応用シナリオ: 関連語の検索 <!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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQLはgroup_concat()関数に基づいて複数のデータ行を結合します
>>: Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装
JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...
テーブル ヘッダーでは、明るい境界線の色を個別に定義できます。基本的な構文<TH ボーダーカラ...
最近コンピュータを再インストールした後、最新バージョンのみをインストールするという強迫観念に基づいて...
コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...
1. SQL インジェクションとは何ですか? SQL インジェクションは、入力パラメータに SQL ...
HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...
1. タイトルHTML では、<h1></h1> から <h6>...
SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...
序文最近、フロントエンドの学習に関する以前のメモを整理したところ、モバイル Web 画面の適応 (r...
この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...
目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...
MySQL データベースの実行効率はプログラムの実行速度に大きな影響を与えます。データベースの効率的...
この記事の例では、vue ElementUI の非同期読み込みツリーを実装するための具体的なコードを...
目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...
ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...