2

我在获取触摸事件与其发生的 html 元素的相对位置时遇到问题。我知道,这可能被问了一百万次。但是我为此苦苦挣扎了好几天,并查看了许多解决方案。

奇怪的是,在我测试的所有桌面浏览器上,它都可以工作,但在任何移动浏览器上都没有。

我在桌面上测试过

  • 歌剧
  • 铬合金
  • 火狐

在手机上

  • HTC One X (4.1) 铬
  • 三星 Note 10.1 (4.1) 股票浏览器
  • 三星 Note 10.1 (4.1) 铬
  • Nexus 7 (4.2) 铬

这是我的代码的jsfiddle

问题似乎是,如果我捕获事件的画布位于滚动区域内,则元素的scrollTop属性在移动浏览器上设置为,它在桌面浏览器上具有适当的值。offsetParent0

那么这是一个已知的错误吗?还是我在这里监督了什么?更重要的是,是否有解决方法或其他方法来实现我的目标?

这是我的一些代码,我如何计算相对位置:

getRelativePosition: function (element, event ) {
var position = { x : event.pageX, y : event.pageY };

do {

  this.log(element.offsetTop);
  this.log(element.offsetHeight);


  position.x -= element.offsetLeft;
  position.y -= element.offsetTop;

  position.x += element.scrollLeft;
  position.y += element.scrollTop;

} while(element = element.offsetParent);

return position;
}
4

1 回答 1

1

该问题可能是因为 Enyo 使用 CSS 3D 变换来改进某些平台上的滚动。有一个新的实用函数叫做getAbsoluteBoundsput into core 来计算相对位置。

您可能会检查它是否可以处理您的情况。简单看一下,我不确定它与您的有多大不同。如果没有,您可能需要在其上提交 Jira。

于 2013-03-12T14:12:53.617 回答