拖拽排序时,其他行折叠状态下维持被拖拽行位置不偏移的问题
拖拽排序Accordion列表时的跳动问题及优化探讨
问题场景
我有一个支持拖拽排序的Accordion(可展开行)列表,为方便用户操作,拖拽时会自动折叠所有行。但目前存在体验问题:
- 仅折叠选中行,或选中行下方的行处于展开状态时,拖拽操作一切正常;
- 若选中行上方存在展开的行,拖拽时选中行会出现向上跳动的情况,用户体验不佳。
问题演示:
临时尝试的解决方案
我查阅了dnd-kit的文档和配置选项,未找到现成解决方案,于是尝试了一个临时方案:给被拖拽项添加合适的顶部内边距,让被拖拽行上方的折叠面板贴近鼠标位置,保持按钮的视觉位置不变,效果如下:

测试该方案可取消DraggableItem.tsx中以下代码的注释:
paddingTop: hideContent && index === 0 ? "168px" : undefined,
注:该临时方案仅在第1、2项展开时生效。
求助疑问
- 这个优化方向是否正确?
- 有没有更简便、规范的解决方法?
- 从用户体验(UX)角度考虑,是否仅隐藏被拖拽行的内容是更好的选择?
- 我也考虑过当有行展开时禁用拖拽,但这对UX和无障碍性都不友好,是否有更优的替代方案?
内容的提问来源于stack exchange,提问作者Shahin Dohan
相关产品推荐
相关产品推荐

