安定一般的なクラシックアプリケーション: アコーディオン効果 導入手ぶれ補正機能のないウェブサイト: 手ぶれ補正機能のあるウェブサイト: 手ぶれ補正シーン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 構成とローカル静的リソースへのアクセスの実装
目次Vue3 + TypeScript 学習1. 環境設定1.1 最新のVue scaffoldin...
1. フローティングとは何ですか?フローティングは、その名の通り、浮遊することを意味します。要素がド...
最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...
目次シナリオ: サーバーデータベースを毎日定期的にバックアップする必要がある1. まずバックアップス...
ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...
実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...
目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...
目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...
この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...
ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...
nginxをインストールするnginx-fullをインストールする必要があることに注意してください。...
1. 崩壊度が高いドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つ...
1. セマンティゼーションとは何ですか? Bing辞書の説明セマンティクス化とは、適切な HTML ...
1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...
今では多くの人がウェブサイト作成に参加していますが、ウェブサイトはどのように作成すればよいのでしょう...