首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >interact.js 1.2.4拖动和手势动作混淆

interact.js 1.2.4拖动和手势动作混淆
EN

Stack Overflow用户
提问于 2015-10-09 08:06:58
回答 1查看 854关注 0票数 4

我对interact.js 1.2.4和iPad Retina iOS 8.1 Mobile有一个问题,我需要以某种方式解决这些问题。这个问题发生在一个嵌套在大型顺序学习web应用程序中的排序组件中,其中用户解决了一系列的任务。interact.js插件用于添加拖放行为,以便用户能够按照正确的顺序对元素进行排序。该网站是现场的,但我将要描述的问题现在是持久的和可复制的,所以它需要迅速解决。

这是装置。我们已经初始化了一些可拖的元素

代码语言:javascript
复制
interact('.drag').draggable(...);

我们已经注册了onstart、onmove和onend侦听器,这些侦听器是通过回调函数手动处理的。

在大多数情况下,拖放行为按计划执行。但是,当在应用程序序列的某些部分中使用排序组件时,交互的actionName是莫名其妙的“手势”而不是“拖动”,这使得validateAction (interact.js)函数返回null而不是有效的操作。这反过来又会导致pointerDown (interact.js)处理程序永远不会被触发,因此不会启动拖动运动,并且元素将永远保持不变,因此不可能在序列中进一步推进。这种行为只发生在iPad上。如果我在iPad模拟器中运行站点,并使用Safari的开发工具交叉功能检查元素,则元素会发生变化,下一个交互的actionName突然变成“拖动”,因此组件开始按预期工作,用户可以按顺序进行操作。

你知不知道:

  1. 是什么原因导致网站传递“手势”动作而不是“拖动”动作?
  2. 当我用十字交叉检查的时候会发生什么?为什么它会改变行为?
  3. 我该如何解决这个问题?

您可以看到组件代码这里,但它是主要骨干解决方案的一部分,所以我只能包括这一部分。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-10-12 12:48:47

我们仍然不知道原因,但是在iOS中似乎有一个bug,它导致应用程序同时触发5个指针事件。因此,插件将事件注册为一个手势,拖放功能失败。插件创建者给出了这个建议,解决了这个问题:

代码语言:javascript
复制
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]);
  }
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33033089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档