专栏名称: 蚂蚁金服ProtoTeam
数据前端团队
目录
相关文章推荐
程序员好物馆  ·  别再给所有函数起名叫 ... ·  4 小时前  
程序员好物馆  ·  别再给所有函数起名叫 ... ·  4 小时前  
前端早读课  ·  【第3521期】如何在 React 中构建一个库 ·  5 小时前  
前端早读课  ·  【第3520期】Slack、Notion ... ·  昨天  
前端早读课  ·  【图书】MCP原理与实战:高效AI ... ·  昨天  
脚本之家  ·  大厂都在用的 12 大主流 AI ... ·  昨天  
脚本之家  ·  大厂都在用的 12 大主流 AI ... ·  昨天  
51好读  ›  专栏  ›  蚂蚁金服ProtoTeam

用两种不同的姿势来实现拖动排序

蚂蚁金服ProtoTeam  · 掘金  · 前端  · 2017-12-08 02:19

正文

请到「今天看啥」查看全文



首先,我肯定是实现了效果的,如下图所示的:

粗略介绍下流程吧,首先需要确定的是应该是什么效果,打个比方,我把a拖到了b上,b能很明显的感觉到,“啊,有什么奇怪的东西进入我的体内了”。但是b并不知道a是想在前面还是想在后面...这时候你就发现问题了吧,对!提问:“a和b到底谁在上面谁在下面?”所以我们刚开始要约定一个规范,把上面的a拖向下面的b,那么就把a排在b的下面,反之,把下面的a拖向上面的b,那么就把a放在b的上面~首先我需要这四个对象:

let dragObj, enterObj, dragIndex, enterIndex;
// dragObj 被拖动的对象a,整个拖动过程它是不会变的
// enterObj 最终进入的对象b,在drop里可以获取到
// dragIndex a在列表中的下标
// enterIndex b在列表的下标

通过比较 dragIndex enterIndex 的大小来决定a和b的关系,剩下的就是对dom进行操作了:

if (dragIndex < enterIndex) {
  dragObj.remove();
  enterObj.after(dragObj);
} else if (dragIndex > enterIndex) {
  dragObj.remove();
  enterObj.before(dragObj);
}   

是不是相当简单了 效果预览 (chrome下观看)







请到「今天看啥」查看全文