当前位置: 首页 > news >正文

js拖拽交换元素位置

摘要:最近在做会议系统,9宫格小画面要支持拖拽调整顺序,需求已经实现了,简单记录下当时的逻辑处理。

/*=========== 关于拖拽逻辑处理 start ========= */
// 当前在拖动的下标
const curDragIndex = useRef<number>(-1);
/* 拖拽元素事件* onDragStart_开始* onDragend_结束
*/
const handleDragStart = (event: any, index: number) => {curDragIndex.current = index;onDropStart(index);
};
const handleDragend = (event: any, index: number) => {event.preventDefault(); 
}
/* 放置元素事件 * onDragEnter_进入放置目标时 * onDragover_在放置目标中移动时 * onDragleave_离开放置目标时* onDrag_放置在目标上并释放时
*/
const handleOnDragEnter = (event: any, index: number) => {// 阻止默认处理(不允许放置)event.preventDefault(); 
}
const handleOnDragLeave = (event: any, index: number) => {// 阻止默认处理(不允许放置)event.preventDefault();
}
const handleOnDragOver = (event: any, index: number) => {// 阻止默认处理(不允许放置)event.preventDefault();
}
const handleOnDrop = (event: any, index: number) => {event.preventDefault();// 处理拖拽交换hadnleSwitchItem(curDragIndex.current, index);
}
/*====== 关于拖拽逻辑处理 end ================ */
// 成员列表
const [memberList, setMemberList] = useState([{name: 'yyh1', id: 1}, {name: 'yyh2', id: 2},
]);
/*  处理拖拽交换curIndex: 0, 类型: number;  说明: 拖拽的下标tranIndex: 1, 类型: number;  说明: 被释放的下班
*/
const hadnleSwitchItem = (curIndex, tranIndex) => {const old = memberList[curIndex];// 交换位置memberList[curIndex] = memberList[tranIndex];memberList[tranIndex] = old;// 更新数据setMemberList([...memberList]);
};/* tsx 页面渲染 */
memberList.map((item, index) => {return <div key={index} className={`${style['user_item_' + (index + 1)]}`}draggable={true}onDragStart={(event) => handleDragStart(event, index)}onDragEnd={(event: any) => handleDragend(event, index)}onDragEnter={(event) => handleOnDragEnter(event, index)}onDragLeave={(event) => handleOnDragLeave(event, index)}onDragOver={(event) => handleOnDragOver(event, index)}onDrop={(event: any) => handleOnDrop(event, index)}></div>
});
http://www.lryc.cn/news/428782.html

相关文章:

  • 在 C++ 中实现自定义容器的实用指南
  • 《深入浅出WPF》读书笔记.4名称空间详解
  • 电驱动总成
  • JavaScript class和正则
  • [Linux#42][线程] 锁的接口 | 原理 | 封装与运用 | 线程安全
  • 奇异递归Template有啥奇的?
  • 每天五分钟深度学习框架pytorch:神经网络工具箱nn的介绍
  • 【办公软件】安全风险 Microsoft 已阻止宏运行,因为此文件的来源不受信任
  • JavaScript语法基础之流程结构(顺序、选择、循环结构)
  • 集团数字化转型方案(四)
  • 【MySQL索引】索引失效场景
  • 基于MATLAB视觉的静态手势识别系统
  • day02-作业题
  • torch.cuda.set_divice()
  • <数据集>RSOD数据集<目标检测>
  • 企业高性能web服务器之Nginx
  • 11-sentinel利用nacos作持久化
  • 密码学之哈希算法
  • 杰发科技AC7801——GPIO通过寄存器地址控制高低电平
  • 代码随想录算法训练营第三十一天| 01背包问题 二维 01背包问题 一维 416. 分割等和子集
  • github删除历史所有commit
  • C++前向声明简介
  • 华为手机是越贵越好吗?
  • 【java基础】IDEA 的断点调试(Debug)
  • MPLS相关实验
  • 从零开始学习SLAM(五):极几何与极约束
  • Freertos学习笔记
  • 线程(Thread)的使用方法和锁(同步代码块,lock锁)的问题
  • Java 反射机制
  • 详解MBR分区结构以及GPT分区结构