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

前端vue3 web端中实现拖拽功能实现列表排序

类似这样的我现在要实现能够拖拽 直接能够让这个列表项 切换顺序

我们可以使用前端库 也可以使用原生自带的功能

我直接贴代码了

template

<el-form-item label="选择书籍:" class="book-select-container"> <div class="booklist-container" ref="bookList"> <div class="book-item" v-for="(item, index) in selectBookList" :key="item.id" :draggable="true" @dragstart="onBookDragStart($event, index)" @dragover.prevent="onBookDragOver($event, index)" @drop="onBookDrop($event, index)" @dragenter="onBookDragEnter($event, index)" @dragleave="onBookDragLeave($event, index)" > <div class="index"> <div class="nnumber">{{ index + 1 }}</div> </div> <div class="novelName">{{ item.novelName }}</div> </div> </div> </el-form-item>

script

// 书籍拖拽相关函数 const onBookDragStart = (event, index) => { event.dataTransfer.setData('text/plain', index.toString()) event.target.classList.add('dragging') } const onBookDragOver = (event, index) => { event.preventDefault() event.currentTarget.classList.add('drag-over') } const onBookDragEnter = (event, index) => { event.preventDefault() } const onBookDragLeave = (event, index) => { event.currentTarget.classList.remove('drag-over') } const onBookDrop = (event, index) => { event.preventDefault() event.currentTarget.classList.remove('drag-over') const dragIndex = parseInt(event.dataTransfer.getData('text/plain')) const dropIndex = index if (dragIndex !== dropIndex) { const itemToMove = selectBookList.value[dragIndex] selectBookList.value.splice(dragIndex, 1) selectBookList.value.splice(dropIndex, 0, itemToMove) // 触发响应式更新 selectBookList.value = [...selectBookList.value] ElMessage.success('书籍顺序已调整') } // 移除拖拽类 document.querySelectorAll('.book-item').forEach(el => { el.classList.remove('dragging') }) }

这个是最简单的 一个模板了

至于说样式的开发 就看怎么写了 原声的拖拽就是这样写的

不使用任何第三方库,纯原生HTML5拖拽API

http://www.jsqmd.com/news/100394/

相关文章:

  • 揭秘气象预测准确率提升秘诀:3种R语言模型对比分析全公开
  • 【企业级Docker Offload部署必读】:揭秘高并发场景下的云端资源热切换技术
  • 《Ascend C 高级优化:GELU、LayerNorm 实现与算子融合实战》
  • 《深入理解 Ascend C:华为昇腾 AI 处理器的高效编程语言》
  • OSPF综合实验
  • 极端天气频发,我们该如何应对?,基于R语言的气象归因分析全流程解析
  • 【Dify检索优化终极方案】:从结果过滤到重排序的全链路解析
  • 揭秘Dify并行执行机制:如何实现任务处理速度提升300%
  • Gin框架入门篇002_第一个Gin服务
  • 广东省考备考三要素(喻明公考)
  • 基于模型上下文协议(MCP)的可插拔式临床AI工具链Clinical DS研究(下)
  • 【Docker MCP 网关服务注册全解析】:掌握微服务动态注册核心技术
  • 【Dify索引优化终极指南】:构建毫秒级视频帧检索系统的秘密武器
  • (混合检索性能革命):Dify响应时间从3秒到200ms的实践路径
  • Rust Rocket Web 应用项目结构详解(MVC 风格)
  • 打通 C++ 与 Node.js 的跨语言交互通道
  • SpringBoot新手入门:从0到1快速搭建Web应用
  • 提高 CHO 细胞蛋白表达量?Cytiva HyClone 培养基是优选!
  • 2025行业盘点追踪,迈向生产级医疗AI:三大核心实践趋势的落地路径分析
  • 【农业产量预测新突破】:基于R语言的气候影响深度分析与实战模型构建
  • Mac电脑往U盘拷贝文件有同名的“._”开头的文件,怎么避免?
  • 数据结构(一)———线性表之顺序表、单向链表
  • 为什么顶级投行都在用R做风险模拟?深度解析蒙特卡洛方法的五大优势
  • 实战 Ascend C:从零实现高性能自定义算子
  • 私有化Dify端口配置难题破解(资深架构师亲授配置逻辑)
  • 机器视觉系统中光源的相关行业术语解读
  • 从入门到精通:Docker MCP 网关负载均衡的7个核心技术点
  • 细胞兼容性好的微载体品牌 赋能干细胞 3D 悬浮高效扩增
  • 数据科学与大数据技术毕业设计创新的选题怎么选
  • [特殊字符] 用 PyTorch 打造「CNN-LSTM-Attention」股票预测神器!——从 0 到 1 的保姆级教程(附完整源码)