在 Android 版本 16 和 18(至少)的 Chrome 中,存在一个错误报告的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 浏览器),但 Android 版 Chrome 在滚动时似乎在(至少某些)触摸事件上破坏了 clientX/Y。
有趣的是,clientX 和 clientY 在click
事件中并没有像在touchstart
.
我的问题是,让 clientX 和 clientY 跨浏览器一致工作的最佳解决方法是什么?似乎抵消window.scrollX
并将window.scrollY
“解决”问题,但一个好的解决方法需要:
- 确定浏览器是否受到影响,最好不要让用户做任何事情,也不要求助于检查 userAgent(因此不要对特定浏览器版本做出任何假设)。换句话说,我们如何判断哪些浏览器对
clientX
和有错误的值clientY
? - 仅在需要解决的那些浏览器上可靠地解决问题(大概只有 Chrome for Android 和它的特定版本,因为未来的版本可能会很好),看起来,抵消
window.scrollX/Y
是这里唯一需要做的事情。