js 原生拖拽排序功能 简单实现

server/2024/11/26 15:22:41/
拖拽排序功能还是挺常见的, 涉及到的api 还是挺多的,这里笔记记录一下以免忘记找不到了!
老规矩先上效果图

拖动排序在这里插入图片描述

html部分

 <div class="list-box"><div draggable="true" class="item">1</div><div draggable="true" class="item">2</div><div draggable="true" class="item">3</div><div draggable="true" class="item">4</div><div draggable="true" class="item">5</div><div draggable="true" class="item">6</div></div>

js 部分

 <script>const list = document.querySelector('.list-box');let sourceNode;// 开始 拖拽list.ondragstart = (e) => {setTimeout(() => {e.target.classList.add('moving');}, 0)sourceNode = e.target};// 禁止元素在列表上方释放list.ondragover = (e) => {e.preventDefault();};// 拖拽进入list.ondragenter = (e) => {// 阻止默认行为e.preventDefault();// 排除 拖拽到外面 和 拖拽原本的位置if (e.target == list || e.target == sourceNode) return;const chidList = [...list.children]// 获取拖拽元素的下标const sourceIndex = chidList.indexOf(sourceNode);// 进入的元素下标const targetIndex = chidList.indexOf(e.target);if (sourceIndex < targetIndex) {// 将拖拽元素放在当前元素下方list.insertBefore(sourceNode, e.target.nextElementSibling)} else {// 将拖拽元素放在当前元素上方list.insertBefore(sourceNode, e.target)}};// 拖动结束移除默认样式list.ondragend = () => {sourceNode.classList.remove('moving')} </script>

css 部分 这个图拽动画 要是相弄得好看还是有难度的 ,我就随便写了点样式

<style>.list-box {list-style: none;width: 500px;margin: 0 auto;/* line-height: 30px; */}.item {background: aquamarine;height: 40px;line-height: 40px;border-radius: 4px;margin-bottom: 10px;user-select: none;transition: background-color 0.3s ease;}.item.moving {background: transparent;color: transparent;border: 1px dashed #ccc;transition: none;}</style>

http://www.ppmy.cn/server/145096.html

相关文章

MySQL面试-1

InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败&#xff0c;要么成功&#xff0c;不能做一半。聪明的InnoDB&#xff0c;在干活儿之前&#xff0c;先将要做的事情记录到一个叫undo log的日志文件中&#xff0c;如果失败了或者主动rollback&#xff0c;就可以通…

基于YOLOv8深度学习的智慧课堂教师上课行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着人工智能技术的迅猛发展&#xff0c;智能课堂行为分析逐渐成为提高教学质量和提升教学效率的关键工具之一。在现代教学环境中&#xff0c;能够实时了解教师的课堂表现和行为&#xff0c;对于促进互动式教学和个性化辅导具有重要意义。传统的课堂行为分析依赖于人工观测&…

使用 OpenCV 进行视频中的行人检测

在计算机视觉领域&#xff0c;行人检测是一个重要的研究方向&#xff0c;它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先&#xff0c;我们需要安装 OpenCV 库。可以通过以下命令来安装&#…

react 中解决 类型“never”上不存在属性“value”。

在 React 中&#xff0c;当你使用 useState 钩子来管理状态时&#xff0c;TypeScript 会尝试推断你的状态变量的类型。在你的例子中&#xff0c;listchannel 被初始化为一个空数组&#xff0c;因此 TypeScript 推断出 listchannel 的类型是 never[]&#xff0c;即一个空数组类型…

跨境出海安全:如何防止PayPal账户被风控?

今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈&#xff0c;我们只是想要安安静静地在网上做个小生意&#xff0c;结果不知道为什么&#xff0c;莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的&#xff0c;今天就来给大家分享分享可能的原…

即时通讯平台-音视频即时通讯平台就选WorkPlus

在现代社会&#xff0c;企业和组织对沟通的需求日益增加&#xff0c;尤其是在瞬息万变的商业环境中&#xff0c;音视频即时通讯已成为沟通的主流形式。WorkPlus作为一款专注于音视频即时通讯的平台&#xff0c;凭借其强大的功能和出色的用户体验&#xff0c;成为了企业和团队的…

ajax基础

一&#xff1a;express框架 在终端输入nodejs文件名 // 引入express const express require(express); //创建应用对象 const app express(); //创建路由规则 app.get(/,(request,response) > {//设置响应response.send(Hello Express); }); // 监听3000端口 app.lis…

云网络基础- TCP/IP 协议

文章目录 典型服务模式TCP/IP 协议设置和查看IPIP地址的分类:IP地址组成: 网络位主机位组成克隆:产生一台新的虚拟机win2008 典型服务模式 • C/S,Client/Server架构 – 由服务器提供资源或某种功能 – 客户机使用资源或功能 TCP/IP 协议 • TCP/IP是最广泛支持的通信协议集合…