美文网首页
如何设计拖拽排序的后端接口

如何设计拖拽排序的后端接口

作者: VioletJack | 来源:发表于2020-07-11 14:34 被阅读0次

最近在做拖拽排序和看板功能,刚好涉及到拖拽排序位置如何保存后端的问题。我也顺便调研了一下,简单说下一些做法。

全量更新

一开始我想到的暴力解法是每次排序将所有数据的排序都改一遍,比如下面的例子。

[{ index: 1, id: 100 }, { index: 2, id:303 }, { index: 3, id:237 }]
// ===>
[{ index: 1, id:303 }, { index: 2, id: 100 }, { index: 3, id:237 }]

这种方式如果数据少还可以,但是数据量一大,接口数据的传输以及大数据的处理必然会是个问题。

取中值法

这是网上看到的一个方法,为数组所有元素加上索引值。

当拖拽改变元素位置时,更新 pos。更新规则如下:

  • 调整一个元素到两个元素中间时,(pre_item.pos + after_item.pos)/ 2 = pos
  • 调整一个元素到第一个元素时, old_first_item.pos / 2 = pos
  • 调整一个元素到最后一个元素时, old_last_item.post + 65536 = pos

这种方式会极大地节省接口数据传输的问题。当然也会有一些小问题,比如中间值不是整数;比如第一个元素的索引值已经变为 0;这些问题是需要后端设计策略解决的。

单列偏移法

给数组一个从 0 开始递增的索引值 index,当拖拽移动元素后,将拖拽元素之前的和现在的位置传递给后端,后端通过两个索引值更新整个数组的 index 索引值,与前端保持同步。

[ 0, 1, 2, 3, 4, 5 ]
// 移动 index=2 的元素
[ 0, 1, 3, 4, 2, 5 ]
// 传给后端 { oldPos: 2, currentPos: 4 }
// 后端移动数组数据,并更新整个数组的 index 为
[ 0, 1, 2, 3, 4, 5 ] // 又变回了递增 index

这样就能和前端遍历时的索引值对应上,做到前端移动元素,后端同步排序的功能。

交给后端算偏移值

这个方式类似于取中值法:首先为所有元素定义六位数的索引值。当拖拽移动元素后,将拖拽元素放置位置前后的元素索引值传给后端,后端去进行索引值的计算。并通过接口响应返回新的索引值更新到前端。

我认为它和取中值的区别就在于一个是前端算完直接给后端,一个是后端进行计算。其实差不多吧。

关于看板的排序问题

如果是列表排序是单列的问题,那么看板的排序就是多列排序和移动的问题。我的想法是,把多列当做一列来看。排序索引上从第一列自上而下递增,然后是后续几列。

而如何跨列移动,其实就是在做拖拽排序的时候更改一下元素所在列的状态,可能是一个状态,也可能是一个 ID,其实就是比单列排序多传了一个字段而已。

参考资料

相关文章

  • 如何设计拖拽排序的后端接口

    最近在做拖拽排序和看板功能,刚好涉及到拖拽排序位置如何保存后端的问题。我也顺便调研了一下,简单说下一些做法。 全量...

  • 拖拽排序后端设计与实现

    背景 最近在做课程后台开发时,遇到一个很有意思的问题。问题是这样的,有多节课程,运营人员可以根据需要调整课程的先后...

  • 拖拽排序后端设计与实现

    背景 最近在做课程后台开发时,遇到一个很有意思的问题。问题是这样的,有多节课程,运营人员可以根据需要调整课程的先后...

  • iOS_UI进阶【拖拽排序】的实现

    导读 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等。拖拽排序是一个交互体验非常好的设计,...

  • source code:TableviewGroup阴影加圆角

    长按拖拽排序(上传者:yeliang_new)长按拖拽排序,拖拽排序。拖拽排序是新闻类的App可以说是必有的交互设...

  • iOS collectionView拖拽排序

    iOS collectionView拖拽排序 iOS collectionView拖拽排序

  • 拖拽操作

    应用: 1.拖拽排序2.拖拽上传3.拖拽裁剪 拖拽流程 确定可拖拽的内容-->开始拖拽-->拖拽过程-->结束拖拽...

  • Spring+SpringMVC+MyBatis整合进阶篇(四)

    前言 前文《RESTful API实战笔记(接口设计及Java后端实现)》中介绍了RESTful中后端开发的实现,...

  • 开发口中的接口、token是什么?

    1.什么是接口 接口是后端设计的一套供我们前端或者后端使用的一种方法。 接口通过网络协议来调用的,我们最常用的协议...

  • 前后端如何交互的

    前后端如何交互的? 1.产品经理确认产品需求 2.前后端人员写接口文档 3.前端和后端分别对接口进行编程 4.如果...

网友评论

      本文标题:如何设计拖拽排序的后端接口

      本文链接:https://www.haomeiwen.com/subject/oncicktx.html