2013-03-11 91 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。