-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
一度のmousemoveイベントで、h5trackmoveが2回動作する。endについても同様。 #150
Comments
dispatchEventでh5trackをテストするケースについて、 ルートエレメント内の要素にh5track*をバインドするケースを追加しました。
dispatchEvent(fireEvent)を使ってh5track*をテストするケースを追加しました。 jQueryイベントオブジェクトのインスタンスは、親子なら別インスタンス、同一要素なら同一インスタンスになります。 $('#child').bind()
$('#child').bind()
// -> 同じイベントオブジェクトがハンドラに来る
$('#child').bind()
$('#parent').bind()
// -> イベントオブジェクトのインスタンスは変わる しかし、jQueryのtriggerでイベントを発火させた場合は親子でも同一インスタンスになります。 そのためtriggerではこの問題は検知できていませんでした。 dispatchEvent(fireEvent)を使った場合は、実際の操作同様に親子の時にイベントオブジェクトが別インスタンスになるので、dispatchEvent(fireEvent)を使ってh5track*をテストするケースを追加しました。 マウスイベントの場合は、documentとルートエレメントにバインドしていたためにこの問題が発生していましたが、タッチイベントの場合は、documentではなくtouchstartのターゲット要素と、ルートエレメントにバインドしています。 そのため、dispatchする要素がルートエレメントである場合のテストケース(現時点でマウスだけ失敗)と、dispatchする要素がルートエレメントの子要素(現時点でマウスもタッチも失敗)について、イベントの発火回数を確認するケースと、dx,dyが計算されて格納されていることを確認するケースを追加しました。 |
originalEventを改変してフラグを建てて管理するのではなく、 move,end(h5trackmove/end?)がdocumentまでバブリングしたときに、そのoriginalEventをstoredOriginalEventsから外す。 という方法で実装します。 |
リストではなく、マウス/タッチイベントについてそれに対応するh5track*イベントをトリガしたかどうかをboolean値を持たせるようにしました。 以前はEventオブジェクトにぶら下げて「発火したかどうか」を汎用な仕組みにするため配列で管理していましたが、 |
タッチはtouchstartした要素がtargetになるため、2重にh5trackmove/endをバインドする必要がないため。
eventDispatch -> dispatchTrackSrcNativeEvent ・mouse/touch毎に関数を作成。 ・eventNameで振り分けて、mouse/touch用の関数を呼び出す。
#137 の対応で、move,endイベントをdocumentだけでなく、ルートエレメントにもバインドするようにしました。
そのため、move/end実行時に2度ハンドラが実行されています。
move,endをトリガで実行した場合は、documentとルートエレメントのハンドラに渡されるjQueryイヴェントオブジェクトが同一インスタンスであるため、h5CustomEventTriggeredのフラグを見て2重にトリガされることはありません。
(そのためテストでこの問題を発見できていませんでした)。
しかし、実際のmousemoveで実行されるハンドラに渡されるjQueryイベントオブジェクトはdocumentとルートエレメントでインスタンスが異なるため、フラグを見れずに、h5trackイベントを2回トリガしてしまいます。
originalEventにフラグを建てれば回避できると思われます。
mousemoveのdispatchEvent(IE8-の場合はfireEvent)でこの問題を確認できるため、テストケースを追加します。
The text was updated successfully, but these errors were encountered: