13

具体的にはスパイダーモンキー

関数を作成し、それらをイベントにアタッチして処理することを知っています。

ハンドラーはどこで定義されており、ユーザーがクリックしたときにonClickJS エンジンはどのようにしてイベントを起動することを認識していますか?onClick

任意のキーワード、デザイン パターン、リンクなどを歓迎します。

アップデート

ここで役立つリンクの集約:

http://www.w3.org/TR/DOM-Level-2-Events/events.html

https://github.com/joyent/node/blob/master/src/node_events.cc

http://mxr.mozilla.org/mozilla/source/dom/src/events/nsJSEventListener.cpp

4

2 に答える 2

9

SpiderMonkey 自体には、イベント処理に関するものは何もありません。イベントは純粋に DOM のものです。

クリック イベントは、SpiderMonkey 自体ではなく、ブラウザ コード (SpiderMonkey を埋め込んだもの) によって発生します。クリックなどのディスパッチを担当するコードについては、http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/content/events/src/nsEventStateManager.cppを参照してください。

ブラウザーは、プロパティへの割り当てを受け取り、onclickそれをイベント リスナーの登録に変換するセッター メソッドを定義するものでもあります。http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/dom/base/nsDOMClassInfo.cpp#l7624を参照してください。これは、から呼び出されnsEventReceiverSH::SetProperty、名前 (idこのコードでは) がIsEventNameテストに合格したプロパティを処理します。

イベント リスナーが登録され、イベントが発生すると、イベント ディスパッチャーがリスナーへの呼び出しを管理します。nsJSEventListenerあなたが見つけたリンクは、C++HandleEvent呼び出しを JS 関数の呼び出しに変換する接着剤です。

したがって、あなたの場合、リスナーに何らかの登録/登録解除メカニズムが必要であり、実装によってイベントが発生し、リスナーにディスパッチされます。この最後の部分をどのように行うかはかなり自由です。Gecko の実装には、DOM Events 仕様を実装する必要があるため、多くの制約がありますが、もっと簡単なことを実行できるはずです。

于 2011-04-22T18:49:16.217 に答える
4
  1. HTMLはシンク/バブルイベント伝播スキーマを使用します:http://catcode.com/domcontent/events/capture.html
  2. 「物理的」イベント(マウス、キーボード)と論理的/合成イベント(focus、click、value_changedなど)があります。
  3. onClickは論理的なイベントであり、マウス、タッチ、キーボードのイベントの結果として生成されます。
  4. マウス(または指のタッチ)によって発生したクリックイベントは、マウスのダウン、移動、およびアップのイベントの結果です。マウスを下、移動、上に移動すると、シンク/バブリングイベントになることに注意してください。これらの「基本的な」イベントのターゲット要素は、クリックイベントのターゲット(またはソース)になります。マウスダウン/アップイベントのターゲット(DOM要素)が異なる場合は、それらの共通の親が使用されます。
  5. マウスの下、移動、上へのイベントのシーケンスは、クリック、スワイプ/スクロールなど、さまざまな論理イベントを生成する場合があります。

これは基本的な概念の完全なリストだと思います。

于 2011-04-22T18:53:19.990 に答える