Drag and drop list 拖拽排序列表
/DRAG und DROP LIST/ · noun · 操作类模式 · #135
可以拖动来调整顺序的列表:按住条目(通常是那个六个点的拖动手柄 ⋮⋮)拖动时,其他条目会让开,露出它将落下的位置,松手就放到那里。待办清单、播放列表、表单搭建器,以及菜单或标签页顺序的设置都常用它。它还需要键盘或按钮的替代方式,因为不是每个人都能拖动。

别名:拖拽排序、拖动排序。
你可能会这样叫它
- “可以拖动排序的列表”
- “每行上那六个点”
- “拖动手柄”
- “按住拖动调整顺序”
……它的名字是 拖拽排序列表(Drag and drop list)。
常见问题
拖动排序后端怎么存储?
常见做法是给每条记录存一个排序字段。拖动后只改被移动的那一条,把它的值设成前后两条之间的数,比如 1000 和 2000 之间放 1500;用小数或可排序的字符串(如 LexoRank)就不用每次重写整张表。数据量小时,也可以直接保存一个按顺序排好的 ID 数组。
代码里叫什么
| SwiftUI | .onMove(perform:) EditButton |
|---|---|
| UIKit | tableView(_:moveRowAt:to:) dragInteractionEnabled |
| Jetpack Compose | Modifier.animateItem() 没有内置的可排序列表:Reorderable 等库给 LazyColumn 加上拖动排序 |
| Flutter | ReorderableListView ReorderableDragStartListener |
| Web (HTML) | draggable="true" dragstart drop |
| Web libraries | SortableJS @dnd-kit/react/sortable |
复制给 AI 编程工具
让这个列表可以拖动排序:每行开头放一个六点拖动手柄(只有按住它才开始拖动,滚动和点按照常工作);被拖的那行呈“拿起”效果,目标位置让出空位,拖到边缘时自动滚动。每行还要有“上移”“下移”操作或菜单,用读屏软件播报新位置;每次放下后保存顺序,保存失败时恢复原样并提示。