我有一个类似trello的界面,在React.js中使用了很棒的ReactDnD库实现,并且它与默认的html5 backend一起使用效果很好。我决定切换到touch backend以支持触控设备。
无论如何,当我切换时,它“有效”,但由于我的列表列和其中的卡都是放置目标,这似乎会导致此触摸后端出现问题。我注意到的行为是一致的,它完全忽略了卡片作为放置目标,并且始终认为放置目标是包含卡片的列表。
我认为这就是我正在发生的事情的原因是,当我将一张卡片从一个列表拖到另一个列表时,如果我将一张卡片悬停在目标列表的中间位置,那么这一点就标记为在列表末尾创建,这是我将鼠标悬停在列表元素的空白区域时的预期行为。如果我将鼠标悬停在中间的卡片上,预期的行为是标记该位置的下降,将卡片向下移动一个位置。
我甚至怀疑这与monitor.isOver({shallow: true})
返回的错误结果有关,正如我在this comment中对我提出的github问题所表达的那样,但是因为它是正确的在那里说,该方法不是每个后端实现的。但也许它的实现使用后端的东西。
以下是提取到独立应用的示例:https://github.com/gnapse/react-dnd-trello
它的行为如上所述。回购中有两个提交。在初始提交时,应用程序使用Html5后端,并按预期工作。您可以签出该提交并查看其工作原理。然后,如果你再次检查主人,你可以看到它与触摸后端一起工作。当您将卡片从列表中拖出而不放弃它时,将其拖回到该列表中,无论您将其放置在卡片列表中的哪个位置,它都会始终在最后标记掉落,而不是在中间。
此外,触摸和鼠标事件都会发生这种情况。我在iPad模拟器中进行了测试,但不是真实的。
我向react-dnd-touch-backend
提交了an issue report,但那里没有任何运气。我考虑过向react-dnd
回购提交一个问题,但由于这不是该项目中的错误,我决定在此发布。