Android chrome pageY值是否随最新的Chrome更新而变化?

时间:2014-10-14 19:32:09

标签: javascript android jquery google-chrome

最新版本的android chrome是否破坏了jquery pageY值,还是我完全错过了什么? 特别是从鼠标事件返回的pageX / pageY值。

<script>
$( document ).on( "click", function( event ) {
  $( "#log" ).text( "pageX: " + event.pageX + ", pageY: " + event.pageY );
});
</script>

http://api.jquery.com/event.pagex/

在Windows Chrome或Android Firefox上,一切看起来都很棒。点击/悬停时此页面上显示的值对于android chrome来说是错误的。负数,数字大于预期,数字在变焦/滚动时变化,当它们不应该等等。我在jsfiddle网站上尝试了几个不同的jquery版本,所有这些都是针对android chrome的。

这是一个小提琴,它改为“点击”而不是“mousemove”:

http://jsfiddle.net/eLvbmqdg/4/

同样,桌面,iphone和android firefox按预期工作。 Android chrome 38.0.2125.102似乎非常破碎。

我在生产中有代码,希望pageY准确无误。该代码在一段时间内没有改变,突然之间的事情正在破裂。

想法?还有其他人看到这个吗?这总是以某种方式破坏?

enter image description here

2 个答案:

答案 0 :(得分:1)

我也在Nexus 5上的Chrome for Android版本38.0.2125.102上看到了这一点。我不确定何时引入了这个错误,但它现在正在破坏我们在查找event.pageY值时依赖的代码。

我检查了我的设备,很明显,与桌面相比,报告的event.pageY值是错误的。同时降级为适用于Android的早期版Chrome(32.0.1700.99)报告了正确的event.pageY值。

答案 1 :(得分:0)

所以这是一个糟糕的黑客。我讨厌将版本字符串放在浏览器的变通方法中。我尝试根据您点击的项目的窗口偏移或大小来做一个,但是如果图像足够大,它将无法在100%的时间内工作。希望这会很快得到解决,但是如果你来这里寻找Android Chrome中这个特定错误的答案,我就是这样做的。

未来版本的android chrome可能会遇到同样的错误,我们可能需要有一个正在运行的版本列表。如果您使用不同的破损版本来到此页面,请将其放在下面的评论中。 (另请注意铬问题。)

var clientY = evt.clientY;
var clientX = evt.clientX;
var pageX = evt.pageX;
var pageY = evt.pageY;

if(window.navigator.appVersion.match(/Chrome\/(.*?) /)[1] == "38.0.2125.102"){
 //hack to fix the chromium bug
 //https://code.google.com/p/chromium/issues/detail?id=423802
 clientX -= window.scrollX;
 clientY -= window.scrollY;
 pageX -= window.scrollX;
 pageY -= window.scrollY;
}