ビデオを囲むコンポーネントがあります: <div class="component"><video src="..." /></div>.
ここで、再生の状態を 2 つの方法で管理したいと考えています。
ネイティブの再生/一時停止ボタンをクリックして変更できる再生状態をリッスンし、それを操作します (コンポーネント レイアウトの変更、他のコンポーネントへの通知など)。
Lets sayを介して外部から手動で再生をトリガーします
myComponent.playContent()
これを正しく管理する方法がわかりません。たとえば、ユーザーがネイティブ ビデオ コントロールをクリックすると、playイベントがディスパッチされます。myComponent.playContent()どの呼び出しを手動で呼び出すとdomVideo.play()、playイベントもディスパッチされるため、イベントをリッスンするだけplayでは、混乱したり、2 回呼び出されたりします。
問題は、ここに 2 つの異なるものが混在していることです。
まず、再生開始は、ユーザーがネイティブ コントロールをクリックすることでトリガーできます。その場合、イベントをキャッチして、あらゆる種類の操作を実行したいと考えています。これは、典型的な「バブリング」のボトムアップ フローです。
第二に、プログラム (通常はコンポーネント ) は「トップダウン」の方法で再生をトリガーしたいと考えています。ここでは、発生したイベントを区別して、ユーザーが作成した再生イベントとして扱わないようにしたいと考えています。
ExtJS のタブ パネルのタブ変更イベント (tabchangeイベント ) など、この問題が何度も発生しましたが、イベント ベースのプログラミング パラダイムでこれに対処する方法がわかりません。
一般的な解決策または正しいアプローチを探しています。ネイティブ DOM イベントだけではありません。YT.Player同じモデルを持つ独自のイベントを持つ (YouTube プレーヤー) オブジェクトがあり、同じ問題に苦しんでいます。
編集:いくつかのトリックsetTimeoutとキャンセルは可能ですが、それは避けたいです。