Chrome for Android バージョン 16 および 18 (少なくとも) には、誤って報告されるバグがありclientX
ますclientY
。ページがスクロールされると、イベントではなく、clientX/Y
少なくともイベントの値が正しくなくなります。ここにバグがあります:touchstart
click
https://code.google.com/p/chromium/issues/detail?id=117754
これには、自分で試すことができるこの例が含まれています: http://www.apprisant.com/tab/cd.html
ここでキャンバスを使用して同様の例を作成しました: http://codepen.io/simonsarris/full/dJcvn
これらの例は他のモバイル ブラウザー (プレーンな古い Android ブラウザーを含む) でも動作しますが、Chrome for Android ではスクロール時の (少なくとも一部の) タッチ イベントで clientX/Y が壊れているようです。
興味深いことに、 clientX と clientY は、 on のclick
ようにイベントで中断されませんtouchstart
。
私の質問は、clientX と clientY をブラウザー間で一貫して動作させるための最善の回避策は何ですか? window.scrollX
とをオフセットすることでwindow.scrollY
問題が「解決」されるようですが、適切な回避策として次のことを行う必要があります。
- できればユーザーに何もさせず、userAgent のチェックに頼ることなく (したがって、特定のブラウザー バージョンを仮定しないで)、ブラウザーが影響を受けているかどうかを判断します。つまり、との値が不適切なブラウザをどのように判断すればよいのでしょうか。
clientX
clientY
- 問題を確実に解決し、解決が必要なブラウザーでのみ解決します (おそらく、Chrome for Android とその特定のバージョンのみ。将来のバージョンでも問題ない可能性があります)
window.scrollX/Y
。