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

但是,到目前为止,touchMove一片混乱。我需要它来进行拖动,并且要做到这一点,我需要跟踪运动的开始位置和运动位置。到目前为止,我还无法从touchMove始终获得所有这些信息。 Various resources建议我应该在event.touches数组中查找我的数据,但是到目前为止,当我尝试在该数组上获取TypeError时,到目前为止构建的jsFiddles都抛出了length,他们声称这是 undefined 的。 (通常的外观,event.pageXevent.pageY等也 undefined 。)

我正在使用iPad和Phantom Limb进行测试,使用后者我可以通过访问originalEvent来获取数据,但这在实际的iPad上不起作用,我认为是因为originalEvent属性是Phantom Limb如何产生的产物作品。 (我的理论是,访问originalEvent就是访问原始的Phantom Limb转换为mouseMovetouchMove。)

为什么为我 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/

10-10 00:00