ember.js 在iOS和Ember中处理touchMove事件

nwsw7zdq  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(181)

我正在为一个使用Flame.js的Ember应用程序添加iOS支持。大多数Flame.js小部件都是don't have built-in support for touch events at the moment,所以我正在努力将其添加到我需要的小部件中。我已经让touchStarttouchEnd在点击和某些状态转换方面工作得很好。
但是,touchMove到目前为止还很混乱。我需要它来拖动,为此,我需要跟踪移动开始的位置和移动的位置。到目前为止,我还不能从touchMove中一致地获得所有这些信息。各种resources建议我应该在event.touches数组中查找我的数据,但到目前为止,我构建的jsFiddles在尝试获取该数组上的length时都会抛出TypeError,它们声称该数组未定义。(通常要查找的位置event.pageXevent.pageY等也未定义。)
我用iPad和Phantom Limb进行了测试,后者可以通过访问originalEvent来获取数据,但在实际的iPad上不起作用,我认为是因为originalEvent属性是Phantom Limb工作方式的产物。(我的理论是,访问originalEvent就是访问由Phantom Limb转换为touchMove的原始mouseMove。)
为什么event.touches数组对我来说是未定义的?更重要的是,我可以在哪里获得触摸位置数据以便我可以拖动?
这是我的most representative jsFiddle。点击按钮得到一个面板,如果这个操作正常的话,你可以通过拖动它的标题栏来重新定位它。App.TestPanel的titleView中的Flam.State扩展覆盖了Flame本身的原始状态。

1l5u6lss

1l5u6lss1#

我不认为它只是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;
    }
};

相关问题