ホームページ ウェブフロントエンド jsチュートリアル 遅延時間を 0 にする setTimeout_javascript 手法を理解する

遅延時間を 0 にする setTimeout_javascript 手法を理解する

May 16, 2016 pm 07:04 PM
settimeout 遅れ

前回の記事「JavaScript に関する 9 つの落とし穴とコメント」、ポイント 9 Focus Pocus で述べた問題を見てみましょう。元の作者はこれについて偏った理解を持っています。実際、これは IE だけの問題ではなく、既存の JavaScript エンジンのスレッド実装の問題です (スレッドについての概念はあまりありません。間違っている場合は、それを願っています)。読者の方が私にアドバイスをくれるかもしれません)。 1と2を見てみましょう。ソース コードを見ると、私たちのタスクは非常に単純であることがわかります。入力テキスト ボックスをドキュメントに追加し、フォーカスして選択するだけです。ここでそれぞれをクリックしてください。1 にはフォーカスして選択することはできませんが、2 にはフォーカスして選択できることがわかります。それらの違いは、

input.focus();
input.select();
の実行時に、遅延時間が 0 の追加の setTimeout 周辺関数があることです。 :

setTimeout(function(){
input.focus();
input.select();
}, 0);
JavaScript に従ってください: 決定版ガイド 5 番目 14.1発言:

実際には、setTimeout は、現在遅延されているイベントのイベント ハンドラーの実行を完了し、ドキュメントの現在の状態を更新した後、setTimeout 内に登録された関数を有効にするようにブラウザーに指示します。

実は、これは実行する必要のあるタスクのキューから飛び出すテクニックです。前の例に戻ると、JavaScript エンジンが onkeypress を実行する場合、複数のスレッドの同期実行がないため、新しく作成された要素の focus イベントと select イベントが存在しないため、これら 2 つのイベントを同時に処理することはできません。例 1 でわかるように、onkeypress の完了後、キューでは JavaScript エンジンがこれら 2 つのイベントを破棄しました。例 2 では、setTimeout によってタスクを特定のキューから新しいキューにジャンプできるため、期待どおりの結果が得られます。

これが遅延イベント 0 を使用した setTimeout の本当の目的です。ここでは、例 3 を見てみましょう。そのタスクは、入力されたテキストをリアルタイムで更新することです。たとえば、「a」と入力すると、プレビュー領域が常に 1 拍遅れることがわかります。プレビューエリアに は表示されません。 b を入力すると、静かに a が表示されます。実際には、プレビュー領域と入力ボックスを同期する方法があります。上記の方法で解決できるため、ここでは答えていません。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Douyuライブ配信の遅延を消す方法は?・Douyu生放送のリプレイを見るにはどうすればいいですか? Douyuライブ配信の遅延を消す方法は?・Douyu生放送のリプレイを見るにはどうすればいいですか? Mar 18, 2024 am 10:55 AM

Douyuライブ配信の遅延を消す方法は?・Douyu生放送のリプレイを見るにはどうすればいいですか?

PHP および MySQL でのメッセージ遅延とメッセージ再試行におけるキュー テクノロジーの応用 PHP および MySQL でのメッセージ遅延とメッセージ再試行におけるキュー テクノロジーの応用 Oct 15, 2023 pm 02:26 PM

PHP および MySQL でのメッセージ遅延とメッセージ再試行におけるキュー テクノロジーの応用

settimeout と setinterval の違いは何ですか settimeout と setinterval の違いは何ですか Aug 15, 2023 pm 02:06 PM

settimeout と setinterval の違いは何ですか

Java でネットワーク遅延の問題を解決する方法 Java でネットワーク遅延の問題を解決する方法 Oct 08, 2023 am 11:21 AM

Java でネットワーク遅延の問題を解決する方法

Windows 10でマウスでウィンドウをドラッグするときの遅延の問題を解決する方法 Windows 10でマウスでウィンドウをドラッグするときの遅延の問題を解決する方法 Jan 06, 2024 pm 05:28 PM

Windows 10でマウスでウィンドウをドラッグするときの遅延の問題を解決する方法

薬は病気を治す: 勝つための 1 つのトリック、PHP サーバーの最適化の問題を完全に解決し、ラグに別れを告げましょう! 薬は病気を治す: 勝つための 1 つのトリック、PHP サーバーの最適化の問題を完全に解決し、ラグに別れを告げましょう! Feb 20, 2024 am 09:43 AM

薬は病気を治す: 勝つための 1 つのトリック、PHP サーバーの最適化の問題を完全に解決し、ラグに別れを告げましょう!

スーパーヒューマンのログインが遅れています。もう一度お試しください。 スーパーヒューマンのログインが遅れています。もう一度お試しください。 Mar 30, 2024 pm 08:31 PM

スーパーヒューマンのログインが遅れています。もう一度お試しください。

中国最強のAI研究機関の大型モデルはなぜ遅れているのか? 中国最強のAI研究機関の大型モデルはなぜ遅れているのか? Jun 26, 2023 pm 07:43 PM

中国最強のAI研究機関の大型モデルはなぜ遅れているのか?

See all articles