2012-10-15 34 views
2

我將iOS支持添加到使用Flame.js的Ember應用程序中。大多數Flame.js小部件don't have built-in support for touch events at the moment,所以我正在努力將其添加到我需要的。我有touchStarttouchEnd工作得很好,用於點擊和某些狀態轉換。處理iOS和Ember中的touchMove事件

但是,touchMove到目前爲止一直是一團糟。我需要拖動它,爲此我需要跟蹤運動開始的位置和位置。到目前爲止,我一直無法從touchMove獲得所有這些信息。 Variousresources建議我應該在我的數據中尋找event.touches數組,但是我迄今爲止構建的jsFiddles在我試圖獲得該數組上的length時拋出TypeError,他們聲稱這個數組未被定義。 (通常的地方看看,event.pageXevent.pageY等也是不確定的。)

我帶一臺iPad,並與Phantom Limb測試,並與後者我是能夠通過訪問originalEvent在數據獲取,但在實際的iPad上不起作用,我想這是因爲originalEvent屬性是Phantom Limb工作方式的一個僞影。 (我的理論是,訪問originalEvent正在訪問的原始mouseMove是幻肢改造成一個touchMove。)

爲什麼event.touches陣列未定義給我嗎?更重要的是,我可以在哪裏獲得觸摸位置數據,以便拖動?

這是我的most representative jsFiddle。單擊該按鈕可以獲得一個Panel,如果這個工作正常,您可以通過拖動它的標題欄來重定位它。 App.TestPanel的titleView中Flame.State的擴展名覆蓋了Flame本身的原始狀態。

回答

4

我不認爲它只是PhantomLimb的神器。我們有一個類似的挑戰,並使用以下命令:

normalizeTouchEvent = function(event) { 
    if (!event.touches) { 
     event.touches = event.originalEvent.touches; 
    } 
    if (!event.pageX) { 
     event.pageX = event.originalEvent.pageX; 
    } 
    if (!event.pageY) { 
     event.pageY = event.originalEvent.pageY; 
    } 
}; 
+0

花了稍微修改一下(我結束了其不僅僅是'touches','pageX'和'pageY'正常化更多),但它工作得更好了。甜! – pjmorse

+0

@pjmorse我很想聽聽你還需要什麼來規範化以及如何做到這一點。要旨? –

+0

'初始畫面[X | Y]'和'客戶端[X | Y]'。我仍然有一些毛病 - 也許今晚。 – pjmorse