我正在将iOS支持添加到使用Flame.js的Ember应用程序中。大多数Flame.js小部件don't have built-in support for touch events at the moment,所以我正在努力将其添加到需要的小部件中。我的touchStart
和touchEnd
可以很好地用于单击和某些状态转换。
但是,到目前为止,touchMove
一片混乱。我需要它来进行拖动,并且要做到这一点,我需要跟踪运动的开始位置和运动位置。到目前为止,我还无法从touchMove
始终获得所有这些信息。 Various resources建议我应该在event.touches
数组中查找我的数据,但是到目前为止,当我尝试在该数组上获取TypeError
时,到目前为止构建的jsFiddles都抛出了length
,他们声称这是 undefined 的。 (通常的外观,event.pageX
,event.pageY
等也 undefined 。)
我正在使用iPad和Phantom Limb进行测试,使用后者我可以通过访问originalEvent
来获取数据,但这在实际的iPad上不起作用,我认为是因为originalEvent
属性是Phantom Limb如何产生的产物作品。 (我的理论是,访问originalEvent
就是访问原始的Phantom Limb转换为mouseMove
的touchMove
。)
为什么为我 undefined event.touches
数组?更重要的是,在哪里可以获取触摸位置数据以便拖动?
这是我的most representative jsFiddle。单击按钮以获取一个面板,如果可行,您可以通过拖动其标题栏来重新定位该面板。 App.TestPanel的titleView
中Flame.State的扩展覆盖了Flame本身的原始状态。
最佳答案
我不认为这只是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;
}
};
关于javascript - 在iOS和Ember中处理touchMove事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12888128/