我对interact.js 1.2.4和iPad Retina iOS 8.1 Mobile有一个问题,我需要以某种方式解决这些问题。这个问题发生在一个嵌套在大型顺序学习web应用程序中的排序组件中,其中用户解决了一系列的任务。interact.js插件用于添加拖放行为,以便用户能够按照正确的顺序对元素进行排序。该网站是现场的,但我将要描述的问题现在是持久的和可复制的,所以它需要迅速解决。
这是装置。我们已经初始化了一些可拖的元素
interact('.drag').draggable(...);我们已经注册了onstart、onmove和onend侦听器,这些侦听器是通过回调函数手动处理的。
在大多数情况下,拖放行为按计划执行。但是,当在应用程序序列的某些部分中使用排序组件时,交互的actionName是莫名其妙的“手势”而不是“拖动”,这使得validateAction (interact.js)函数返回null而不是有效的操作。这反过来又会导致pointerDown (interact.js)处理程序永远不会被触发,因此不会启动拖动运动,并且元素将永远保持不变,因此不可能在序列中进一步推进。这种行为只发生在iPad上。如果我在iPad模拟器中运行站点,并使用Safari的开发工具交叉功能检查元素,则元素会发生变化,下一个交互的actionName突然变成“拖动”,因此组件开始按预期工作,用户可以按顺序进行操作。
你知不知道:
您可以看到组件代码这里,但它是主要骨干解决方案的一部分,所以我只能包括这一部分。
提前谢谢。
发布于 2015-10-12 12:48:47
我们仍然不知道原因,但是在iOS中似乎有一个bug,它导致应用程序同时触发5个指针事件。因此,插件将事件注册为一个手势,拖放功能失败。插件创建者给出了这个建议,解决了这个问题:
interact(document).on('down', function (event) {
var interaction = event.interaction;
var canGesture = interaction.target && interaction.target.options.gesture.enabled;
var maxAllowedPointers = canGesture? 2 : 1;
while (interaction.pointers.length > maxAllowedPointers) {
interaction.removePointer(interaction.pointers[0]);
}
})https://stackoverflow.com/questions/33033089
复制相似问题