無料学習の推奨事項: js ビデオ チュートリアル
# #JavaScript イベント フローについて
##前書き- #本文
- #イベントとは何ですか?
- イベントとは何ですか?イベント ストリーミング?
- イベント バブリングとイベント キャプチャ
- DOM イベント階層
- DOM0 イベント
- DOM2 イベント
この記事を読む前に、JavaScript イベント ループについて見てみることをお勧めします。もちろん、既に知っている人向けです。必要ありません! この記事では、js のイベント フローについて説明します。
#本文
Web ページ上でクリックやスライドなどの特定の種類の操作を実行すると、対応するイベントがトリガーされることは誰もが知っています。 。また、Web ページ全体が実際にはブラウザーによって DOM ツリーに解析されることもわかっています。ノードがイベントを生成すると、そのイベントはノードとルート ノードの間で一定の順序で伝播され、この伝播経路を通過するすべてのノードがイベントを受信します。このプロセス全体を DOM イベント フロー ## と呼びます#。
イベントとは何ですか?
js と html 間のやり取りは、実際には「イベント」を通じて実現されます。 Web ページ上のすべてのユーザーのクリック、選択、スライドなどは、JS の世界ではすべてイベントです。 イベントの場合、イベントが発生するとレスポンスが必要ですが、js ではいわゆるレスポンスがリスナーです。オブザーバー パターンと同様に、イベントはサブジェクトであり、イベントが発生すると、イベント (サブジェクト) に対応するすべてのリスナーに、対応する応答を実行するように通知する必要があります。
イベント フローとは何ですか?イベント フローは、ページからイベントを受け取る順序を記述します。主に次の 2 種類に分かれます。
IE のイベント バブリングNetscape のイベント キャプチャ- イベント バブリング vs イベント キャプチャ
IE が提案するイベント フロー モデルはイベント バブリングです。つまり、イベントは下から上に、ターゲットによってトリガーされた要素からドキュメント オブジェクトに至るまで、段階的に上向きに伝播します。
Netscape が提案したイベント フロー モデルはイベント キャプチャであり、イベント バブリングとは逆に、上から下へ、つまりドキュメント オブジェクトからターゲット オブジェクトのステップに伝播します。一歩ずつ。
上記は、DOM0 標準におけるイベント フローの仕組みです。その後、ECMAScript によって DOM2 のイベント フローがさらに標準化されました。 DOM2 では、イベントに含まれるイベント ストリームは次の 3 つのステージに分割されます。
- イベントのバブリング段階 (バブル)
-
DOM イベントの分類
DOM ノードでイベントが発生したときは、当然のことながら、次のことを行う必要があります。
このうち、より重要なものは DOM0/DOM2 であるため、以下ではそれらに焦点を当てて説明します。DOM0 イベント
DOM0 レベルのイベントを実装するには、主に 2 つの方法があります。1 つ目は、関数名をイベント属性として直接使用するインライン モデルです。 htmlタグの属性値。次のとおりです: // js code// eventDOM.jsfunction btnClick() {
console.log('Hello World')}
<!-- html code -->
<title>eventDOM demo</title>
<p></p>
<script></script>
ただし、インライン モデルには明らかな欠点があります。つまり、コンテンツ (html) と動作 (js) の分離に関する W3C 要件に違反しています。 2 番目のタイプは、スクリプト モデル (動的バインディング モデル) です。具体的な方法は、js スクリプトを通じて特定の DOM ノードを選択し、そのノードにイベント属性と属性値を追加します。次のように:
// js code// eventDOM.jslet btn = document.getElementById('btn')let btnClick = function() { console.log('Hello World')}btn.onclick = btnClick
<!-- html code --> <title>eventDOM demo</title> <p></p> <script></script>
をクリックすると、
Hello Worldが表示されますが、問題ありません。上記の HTML コードに基づいて、次のように少し js を追加します:
// js code// eventDOM.jslet btn = document.getElementById('btn')let btnClick = function() { console.log('Hello World')}let btnClick2 = function() { console.log('Hello World again')}btn.onclick = btnClick btn.onclick = btnClick2
これで、Hello World again
をクリックした場合のみ表示されることがわかりました。したがって、スクリプト モデルでは、1 つのノードが同じタイプのイベントを 1 回追加することのみが許可され、後続のイベントは以前のイベントを上書きします。
最後に興味深い例を見てみましょう:<pre class="brush:php;toolbar:false"><!-- html code -->
<title>eventDOM demo</title>
<p>
btn3 </p><p>
btn2 </p><p>
btn1 </p>
</pre>
// js code// eventDOM.jslet btn1 = document.getElementById('btn1')let btn2 = document.getElementById('btn2')let btn3 = document.getElementById('btn3')btn1.onclick = function() { console.log('1')}btn2.onclick = function() { console.log('2')}btn3.onclick = function() { console.log('3')}
btn3 をクリックすると、出力は次のようになります:
これは期待どおりですが、btn1 をクリックするとどうなりますか? 出力は次のようになります:
これは少し奇妙です。btn1 には明らかに 1 つのリスナーを追加しただけですが、btn2 と btn3 と一緒に追加したように感じるのはなぜですか? 理由は、DOM0 には 2 つのモデルがあるためです: IE によって提案されたイベント バブリングと、 Netscape によって提案されたイベント キャプチャですが、実際には DOM0 はイベント バブリングのみをサポートしています。したがって、btn1 をクリックした場合のイベント フローは次のようになります。
つまり、イベント フローは btn2 と btn3 も通過するため、それらのイベント処理がトリガーされます。しかし、明らかに、これは私たちが望んでいる結果ではありません。
DOM2 イベント
さらに詳細に指定すると、DOM2 レベルのイベント ハンドラーが存在します。 2 つのメソッドが定義されています。
- addEventListener() イベント リスナーの追加
- removeEventListener() イベント リスナーの削除
これら 2 つの関数次の表:
タイプ | 説明 | |
---|---|---|
String | 「クリック」など、監視するイベントの名前。ここで「on」にする必要はないことに注意してください。 | |
function | イベントをトリガーするために実行されるコールバック関数 | |
イベントがキャプチャフェーズで処理されるかどうか |
以上がJavaScript のイベント フローの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
