Closed fukudayasuo closed 10 years ago
テストケースも修正します。 今までは、タッチのあるデバイスはタッチのみ、タッチのないデバイスはマウスイベントのみでテストを行っていました。 これを、タッチのあるデバイスはタッチのテスト、マウスのあるデバイスはマウスのテスト(両方ある場合は両方)でテストを行うようにします。
iOS、androidにはマウスもタッチもイベントがあるので、両方のテストが行われるようになります。
Firefoxでは、指でのタッチ操作を行ったときに、mousedownイベントが発生しない場合があります。その場合、FWがh5trackstartイベントを発火させることができません。
Firefox29及び30βで検証を行い、以下の挙動を確認しました。
例えば、縦に長いページで、bodyにy軸方向にスクロールバーが出ており、その中にmousedownイベントを拾っている要素があるとすると、その要素に対して以下のような挙動をします。
なお、Firefoxはv18でtouchXXXイベントをサポートしていましたが、v24で削除され、現在のv29でもtouchXXXイベントは起きません。
なお、タッチペンやマウスでの操作には問題ありませんでした。
対策としては、イベントをバインドしている要素の親要素全てについて、以下のようにoverflow:hiddenを設定すると、スクロールは発生せず、mouseXXXイベントが発生します。(hifiveはh5trackXXXイベントをあげることができます。)
$('.track-target').parents().css('overflow', 'hidden');
現時点では、Firefoxの挙動については制限事項とします。 Firefox29ではtouch-actionが実験的に実装されているので(デフォルトでは無効) これがデフォルトで有効になり、意図した動作を実現できるようになった場合に改めて対応を検討します。
touch-action
(または -ms-touch-action
)に対応しているブラウザについて、コントローラがh5trackstartイベントをバインドする時に、 touch-action:none
のスタイルをFWが設定するようにしました。
touch-action
に設定する値は 'none'
がデフォルトであり、変更したい場合は h5.settingsrack.startTouchAction
に他の値を設定してください( 'pan-x'
, auto
など)。
null
を設定すると、FWは touch-action
のスタイルを変更することはありません。
@fukudayasuo settingsのプロパティ名が間違っています。コミットコメント側でも間違っています。 コードでtypoがないか確認してください。
コミットコメント及び、issueコメントが間違えていました。
正しくは、h5.settings.trackstartTouchAction
です。
ソースコードは間違っていませんでした。
現在時点(2015年10月)で、タッチ対応PC端末における各ブラウザのtouch, mouse, pointerの各イベントについて再度挙動を確認しました。
マウス操作、タッチ操作、デジタライザペンでの操作、の各操作でどのイベントが起きるかを検証しました。
タッチ | マウス | デジタイザペン | |
---|---|---|---|
mousedown | ○ | ○ | ○ |
pointerdown | ○ | ○ | ○ |
touchstart | × | × | × |
タッチ | マウス | デジタイザペン | |
---|---|---|---|
mousedown | ○ | ○ | ○ |
pointerdown | ○ | ○ | ○ |
touchstart | × | × | × |
タッチ | マウス | デジタイザペン | |
---|---|---|---|
mousedown | × | ○ | ○ |
pointerdown | × | × | × |
touchstart | ○ | × | × |
タッチ | マウス | デジタイザペン | |
---|---|---|---|
mousedown | ○ | ○ | ○ |
pointerdown | × | × | × |
touchstart | × | × | × |
タッチ | マウス | デジタイザペン | |
---|---|---|---|
mousedown | × | ○ | ○ |
pointerdown | × | × | × |
touchstart | ○ | × | × |
デジタイザペン使用時の結果はいずれのブラウザもマウスと同じでした。
コントローラの実装が、タッチイベントがあるならタッチイベントでh5trackを発火しマウスイベントは無視しているためである。
タッチイベントがあるブラウザについて、マウス操作時にはタッチイベントが発火しない場合にh5trackイベントがマウス操作時に発火しない。
以下、ブラウザ毎の挙動をまとめた。
IE11 touchイベントは無い。 タッチ時:pointerdown、mousedownが起きる。h5trackstartが発火する。 マウス時:pointerdown、mousedownが起きる。h5trackstartが発火する。タッチ時と同じ。
chrome34 touchイベントあり。 タッチ時:touchstartが起きる。h5trackstartが発火する。 マウス時:mousedownが起きる。h5trackstartは発火しない。
Firefox29,30β touchイベントは無い タッチ時:mousedownが起きる。h5trackstartが発火する。 マウス時:mousedownが起きる。h5trackstartが発火する。タッチ時と同じ。
opera20 touchイベントあり。 タッチ時:touchstartが起きる。h5trackstartが発火する。 マウス時:mousedownが起きる。h5trackstartは発火しない。
ChromeとOperaだとマウス操作時にh5trackイベントが発火しなかった。