我正在为使用Flame.js的Ember应用程序添加iOS支持。大多数Flame.js小部件don't have built-in support for touch events at the moment,所以我正在努力将它添加到我需要的部件中。我有touchStart
和touchEnd
正常工作,可以点击和某些状态转换。
然而,touchMove
到目前为止一直是一团糟。我需要它来拖动,为此我需要跟踪运动的开始位置和位置。到目前为止,我无法从touchMove
始终如一地获取所有信息。 Various resources建议我应该在event.touches
数组中查找我的数据,但到目前为止我构建的jsFiddles在我尝试获取时TypeError
{1}}在该数组上,他们声称这是未定义的。 (通常看的地方,length
,event.pageX
等也未定义。)
我正在使用iPad和Phantom Limb进行测试,而后者我可以通过访问event.pageY
来获取数据,但这不适用于实际的iPad,我认为因为originalEvent
属性是Phantom Limb如何工作的工件。 (我的理论是访问originalEvent
正在访问幻影肢体转化为originalEvent
的原始mouseMove
。)
为什么touchMove
数组对我来说不明确?更重要的是,我在哪里可以获得触摸位置数据,以便我可以拖动?
这是我的most representative jsFiddle。单击按钮以获取一个Panel,如果这个工作正常,可以通过拖动其标题栏来重新定位。 App.TestPanel的event.touches
中的Flame.State扩展正在覆盖Flame本身的原始状态。
答案 0 :(得分: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;
}
};