处理iOS和Ember中的touchMove事件

时间:2012-10-15 01:14:19

标签: javascript-events touch ember.js

我正在为使用Flame.js的Ember应用程序添加iOS支持。大多数Flame.js小部件don't have built-in support for touch events at the moment,所以我正在努力将它添加到我需要的部件中。我有touchStarttouchEnd正常工作,可以点击和某些状态转换。

然而,touchMove到目前为止一直是一团糟。我需要它来拖动,为此我需要跟踪运动的开始位置和位置。到目前为止,我无法从touchMove始终如一地获取所有信息。 Various resources建议我应该在event.touches数组中查找我的数据,但到目前为止我构建的jsFiddles在我尝试获取时TypeError {1}}在该数组上,他们声称这是未定义的。 (通常看的地方,lengthevent.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本身的原始状态。

1 个答案:

答案 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;
    }
};