2013-03-11 90 views
2

我在将触摸事件的相对位置获取到它发生的html元素时遇到了问题。我知道,这可能是一百万次。但是我为此付出了数日的努力,并且看到了很多解决方案。touchevent在手机浏览器中的相对位置

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

我在桌面上

  • 歌剧
  • Firefox的测试

和移动

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

这里是一个jsfiddle我的代码。

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

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

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

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; 
} 

回答

1

问题是可能造成的,因为Enyo使用CSS 3D转换改进滚动在某些平台上。有一个新的效用函数getAbsoluteBounds放入核心来计算相对位置。

您可能会检查它是否处理您的情况。简短地看看它,我不确定它和你的有很大的不同。如果没有,你可能想要在上面提交一个Jira。