我在获取触摸事件与其发生的 html 元素的相对位置时遇到问题。我知道,这可能被问了一百万次。但是我为此苦苦挣扎了好几天,并查看了许多解决方案。
奇怪的是,在我测试的所有桌面浏览器上,它都可以工作,但在任何移动浏览器上都没有。
我在桌面上测试过
- 歌剧
- 铬合金
- 火狐
在手机上
- HTC One X (4.1) 铬
- 三星 Note 10.1 (4.1) 股票浏览器
- 三星 Note 10.1 (4.1) 铬
- Nexus 7 (4.2) 铬
这是我的代码的jsfiddle。
问题似乎是,如果我捕获事件的画布位于滚动区域内,则元素的scrollTop
属性在移动浏览器上设置为,它在桌面浏览器上具有适当的值。offsetParent
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;
}