当前位置: 首页 > 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>
});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android笔试面试题AI答之Kotlin(11)
  • vue 实现批量引入组件
  • 设计模式六大原则(六)--迪米特法则
  • 音频提取软件分享:6款好用音频提取工具推荐
  • 中仕公考怎么样?考教师编有什么具体要求?
  • chrome浏览器插件开发--如何在content_scripts的js中使用插件的本地图片
  • jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目
  • uniapp在线视频监控开发
  • 精通推荐算法27:行为序列建模之BST— 代码实现
  • 开学季好物分享,精选五款开学必备的数码好物推荐!
  • 第二十六届中国机器人及人工智能大赛(智能驾驶)思路
  • 基于JavaEE的农产品销售管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 随机涂鸦 pil
  • 小琳AI课堂 - AIGC在不同行业的应用潜力与未来发展深度解析
  • 2024精选骨传导耳机推荐,选这五款可以帮你避坑!
  • 【译】JS基础算法脚本:字符串结尾
  • 《剑指offer》分解让复杂问题更简单
  • 「译」Node.js Streams 基础
  • Android Studio:GIT提交项目到远程仓库
  • Android优雅地处理按钮重复点击
  • github指令
  • PAT A1017 优先队列
  • Spring框架之我见(三)——IOC、AOP
  • Terraform入门 - 3. 变更基础设施
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue.js框架原理浅析
  • 对象引论
  • 反思总结然后整装待发
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 世界上最简单的无等待算法(getAndIncrement)
  • 探索 JS 中的模块化
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 学习HTTP相关知识笔记
  • 源码安装memcached和php memcache扩展
  • gunicorn工作原理
  • ​2020 年大前端技术趋势解读
  • # centos7下FFmpeg环境部署记录
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #WEB前端(HTML属性)
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Oracle)SQL优化技巧(一):分页查询
  • (rabbitmq的高级特性)消息可靠性
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm码农论坛 毕业设计 231126
  • (新)网络工程师考点串讲与真题详解
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)大型网站架构演变和知识体系
  • ***通过什么方式***网吧
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器