在适用于Android的Chrome版本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
我在这里用 Canvas 做了一个类似的例子:http://codepen.io/simonsarris/full/dJcvn
这些示例可在其他移动浏览器(包括普通的旧版Android浏览器)上运行,但Android版Chrome浏览器在滚动(至少某些)触摸事件时似乎破坏了clientX/Y。
有趣的是,clientX和clientY在click
事件上并没有像在touchstart
上那样被破坏。
我的问题是,要使clientX和clientY在浏览器之间一致工作的最佳解决方法是什么? 看来,用window.scrollX
和window.scrollY
抵消将“解决”问题,但是一个好的解决方法需要:
clientX
和clientY
值不正确? window.scrollX/Y
抵消是唯一需要做的事情这里。 最佳答案
只需使用e.pageY - window.scrollY
代替e.clientY
(或X
,相应地)。e.pageY
将为您提供事件发生的位置,并通过window.scrollY
进行偏移将“删除由于滚动而在屏幕外显示的空白”。您可以有条件地检查e.pageY - window.scrollY === e.clientY
,但是由于解决方法可以为您提供正确的值,因此无论如何都要对其进行计算以进行检查,这是违反直觉的。
关于javascript - Chrome for Android的不正确的clientX和clientY行为如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13710610/