前端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

相关推荐
一点一木1 天前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
天外飞雨道沧桑1 天前
TypeScript 中 omit 和 record 用法
前端·javascript·typescript
Lee川1 天前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
canonical_entropy1 天前
从 Spec-Driven Development 到 Attractor-Guided Engineering
前端·aigc·ai编程
研☆香1 天前
聊聊前端页面的三种长度单位
前端
给钱,谢谢!1 天前
React + PixiJS 实现果园成长页:从状态机到浇水动画
前端·react.js·前端框架
暗冰ཏོ1 天前
VUE面试题大全
前端·javascript·vue.js·面试
次元工程师!1 天前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)
java·前端·python·低代码·langflow
Bug-制造者1 天前
现代Web应用全栈开发:从架构设计到部署落地实战
前端
青春喂了后端1 天前
IntelliGit 前端状态层重构:把一个全局 Store 拆成清晰的状态边界
前端·重构·状态模式