在使用 vuedraggable 做拖拽效果时,因为要用到滚动条而使用了 overflow: scroll,导致了两个奇怪的效果,虽然折腾了一段时间,不过最后我还是将这些奇怪的 bug 解决了。
奇怪的效果
- 如果拖动 item,将光标移动到某两个 item 之间的界线上,有时会出现 闪烁 现象,原因是 item 不断地修改最终位置,导致 list 不停地改变。
- 如果item 刚好被父元素(设置了
overflow:scroll
的 容器元素)遮住,拖拽的时候,跟随光标的 item 快照是 残缺 的。
解决过程
首先看了官方文档,看的快睡着了。然后看了看 issue,貌似没有人提交类似的 issue,大概这也算不上 bug 吧,大概论坛有解决的方法。搜索引擎也查过,没发现什么有用的文章。
期间,找到一个官方给的 demo,修改了css样式:父元素设置了固定高度,并添加 overflow:scroll
,并将 item 的高度提高。测试发现:还是出现了我遇到的问题。
后来又认真地看了官方文档,甚至想看看源码实现(太耗费时间放弃)。
最后决定从 vuedraggable 的 move 事件入手,试着解决第一个问题。原本我以为只有新位置刚好在顶部或底部时,才会出现疯狂闪烁的鬼畜现象。搞完后发现,任