VueDraggablePlus:实现灵活拖拽的前端神器

VueDraggablePlus:实现灵活拖拽的前端神器

大家好,我是墩墩大魔王丶,今天我将为大家介绍一款功能强大、灵活易用的前端组件------VueDraggablePlus。作为前端工程师,我们经常会遇到需要实现拖拽功能的场景,而VueDraggablePlus正是为了解决这一痛点而诞生的。让我们一起来看看它的特点和用法吧!

VueDraggablePlus是一个功能齐全、无缝迁移、灵活使用的拖拽组件,完全继承了Sortable.js的所有功能,支持Vue 3和Vue 2,使用TypeScript编写并提供完整的TS文档,支持双向绑定和自定义容器,可以通过组件、指令或函数式调用实现拖拽功能。

官网: alfred-skyblue.gitee.io/vue-draggab...

场景化引入:解决拖拽列表痛点

在日常开发中,我们经常会遇到需要实现拖拽列表的需求,但是传统的方法往往需要将拖拽功能作为列表的直接子元素来实现,这在一些情况下会受到限制。比如,当我们使用一些组件库时,如果组件库中没有提供列表根元素的插槽,我们就很难实现拖拽列表。这时,VueDraggablePlus就派上了用场!它可以让你在任何元素上使用拖拽列表,通过指定元素的选择器,来获取到列表根元素,然后将列表根元素作为拖拽容器,轻松实现拖拽功能。

安装

bash 复制代码
npm install vue-draggable-plus
html 复制代码
<template>
    <VueDraggable ref="el" v-model="list">
      <div v-for="item in list" :key="item.id">
        {{ item.name }}
      </div>
    </VueDraggable>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { VueDraggable } from 'vue-draggable-plus'
const list = ref([
  {
    name: 'Joao',
    id: 1
  },
  {
    name: 'Jean',
    id: 2
  },
  {
    name: 'Johanna',
    id: 3
  },
  {
    name: 'Juan',
    id: 4
  }
])
</script>

alfred-skyblue.gitee.io/vue-draggab...

使用说明:多种用法灵活选择

VueDraggablePlus提供了多种使用方式,您可以根据自己的需求选择最适合的方式来实现拖拽功能。您可以使用组件的方式,在需要拖拽的元素上直接添加VueDraggablePlus组件;也可以使用函数的方式,通过调用函数来实现拖拽功能;还可以使用指令的方式,通过指定元素的选择器来实现拖拽功能。总有一款适合您!

html 复制代码
<template>
    <div
      v-draggable="[
        list,
        {
          animation: 150,
        }
      ]"
    >
      <div
        v-for="item in list"
        :key="item.id"
      >
        {{ item.name }}
      </div>
    </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { vDraggable } from 'vue-draggable-plus'
const list = ref([
  {
    name: 'Joao',
    id: 1
  },
  {
    name: 'Jean',
    id: 2
  },
  {
    name: 'Johanna',
    id: 3
  },
  {
    name: 'Juan',
    id: 4
  }
])

function onStart() {
  console.log('start')
}

function onUpdate() {
  console.log('update')
}
</script>

这里我们使用了VueDraggablePlus组件的方式来实现拖拽列表,将列表项包裹在VueDraggablePlus组件内,即可轻松实现拖拽功能。

解决痛点:完美继承Sortable.js功能

VueDraggablePlus完全继承了Sortable.js的所有功能,让您可以尽情享受拖拽的乐趣。无论是拖拽排序、拖拽上传还是拖拽调整布局,VueDraggablePlus都可以轻松应对,让您的前端开发更加便捷高效。

演示:多种场景应用

VueDraggablePlus不仅功能强大,而且还支持多种场景的应用。比如双列表拖拽、克隆、自定义克隆、指定元素触发、指定目标容器、内置动画合并等,为您的项目提供了更多的可能性。

基础使用

双列表拖拽

克隆

自定义克隆

指定元素触发

指定目标容器

Transition

内置动画合并

表格行拖拽

表格列拖拽

嵌套

组件参数和事件

参数

参数 说明 类型 默认值
animation 拖动时显示动画 Number 0
chosenClass 被选中项的 CSS 类名 String 'sortable-chosen'
delay 选中拖拽延时 Number 0
delayOnTouchOnly touch 事件延迟 Number 0
direction 拖拽方向,默认自动判断。可选值有horizontal 和 vertical String -
disabled 是否禁止拖拽 Boolean false
dragClass 拖拽项类名 String 'sortable-drag'
draggable 指定元素内的哪些项目应该是可拖动的 String -
emptyInsertThreshold 拖动时鼠标必须与空可排序项的距离(以像素为单位),以便将拖动元素插入到该可排序项中, 设置为0禁用此功能。 Number 5
easing 简化动画。 Easing -
fallbackClass 当使用forceFallback的时候,被复制的dom的css类名 String sortable-fallback
fallbackOnBody 将cloned DOM 元素挂到body元素上。 Boolean false
fallbackTolerance 以像素为单位指定鼠标在被视为拖动之前应该移动多远。 Number 0
filter 不需要进行拖动的元素 String -
forceFallback 忽略 HTML5拖拽行为,强制回退 Boolean false
ghostClass drop placeholder的css类名 String 'sortable-ghost'
group 要将元素从一个列表拖到另一个列表中,两个列表必须具有相同的group 值。您还可以定义列表是否可以被移出、或者克隆以及接收其他列表元素。详情查阅上方TS类型定义 Group -
handle 设置可拖拽句柄的css类名,如果不设置,默认对目标元素的子列表操作进行拖拽 String -
invertSwap 如果设置为 true,将始终使用反向交换区 Boolean false
invertedSwapThreshold 反向交换阈值,默认情况下将设置为swapThreshold 值 Number -
preventOnFilter 触发filter时调用event.preventDefault() Boolean true
removeCloneOnHide 删除不显示的克隆元素,而不是仅仅隐藏它 Boolean true
sort 定义列表单元是否可以在列表容器内进行拖拽排序 Boolean true
swapThreshold 交换区的阈值 Number 1
touchStartThreshold 在取消延迟拖动事件之前点应该移动多少像素 Number 1
setData 传递一个函数,函数的第一个参数为DataTransfer类型,第二个参数为HTMLElement 类型 Function -
scroll 是否启用滚动 Boolean or HTMLElement true
scrollFn 自定义滚动 ScrollFn -
scrollSensitivity 鼠标必须离边缘多近才能开始滚动,单位 px Number -
scrollSpeed 滚动速度(ms/px) Number -
bubbleScroll 将自动滚动应用于所有父元素,以便更轻松地移动 Boolean true

事件函数

事件函数名称 说明 类型
onChoose 元素被选中时触发 ((event: SortableEvent) => void)
onUnchoose 元素取消选中时触发 ((event: SortableEvent) => void)
onStart 拖拽开始时触发 ((event: SortableEvent) => void)
onEnd 拖拽结束时触发 ((event: SortableEvent) => void)
onAdd 元素从一个列表拖拽到另一个列表时触发 ((event: SortableEvent) => void)
onUpdate 元素顺序更新时触发 ((event: SortableEvent) => void)
onSort 列表任何更改都会触发 ((event: SortableEvent) => void)
onRemove 元素从列表中移除时触发 ((event: SortableEvent) => void)
onFilter 拖拽一个被过滤元素时触发 ((event: SortableEvent) => void)
onMove 拖拽移动时触发 ((event: MoveEvent,originalEvent: Event) => void)
onClone 克隆一个元素时触发 ((event: SortableEvent) => void)
onChange 拖拽元素改变位置时触发 `((event: SortableEvent) =>

示例

通过 监听 onStart 事件, 将当前选中项的背景设置为白透明的白色。

其中 SortableEvent 的 item 即当前拖拽项, 通过改变它的 style 即可。

通过 监听 onEnd 事件, 在拖拽结束时 ,将当前选中项的背景颜色还原。

vue 复制代码
<template>
  <VueDraggable ref="el" v-model="list" @start="onStart" @end="onEnd">
    <div v-for="item in list" :key="item.id" class="drag-item">
      <NodejsButton :title="item.name" />
    </div>
  </VueDraggable>
</template>

<script setup>
import { ref } from 'vue'
import NodejsButton from '@/components/button/nodejs-button.vue'
import { VueDraggable } from 'vue-draggable-plus'
const list = ref([
  {
    name: 'Aoooooo',
    id: 1
  },
  {
    name: 'Boooooo',
    id: 2
  },
  {
    name: 'Coooooo',
    id: 3
  },
  {
    name: 'Doooooo',
    id: 4
  }
])

const onStart = (e) => {
  e.item.style.backgroundColor = '#ffffff22'
}
const onEnd = () => {}
</script>

<style>
.drag-item {
  width: 240px;
  margin-bottom: 15px;
  cursor: grab;
  &:last-of-type {
    margin-bottom: 0;
  }
}
</style>

结语

通过本文的介绍,相信大家已经对VueDraggablePlus有了初步的了解。作为前端工程师,掌握这样一款功能强大、灵活易用的前端组件,将会为您的项目开发带来很大的便利。快来尝试一下吧,让拖拽功能变得更加简单愉快!

以上就是本次的技术分享,希望对大家有所帮助,谢谢大家的阅读!

相关推荐
lovingsoft3 分钟前
Chrome Lighthouse 详解
前端·chrome
Qlly13 分钟前
全栈工程师怎么接需求?从一句「加个功能」聊到能开发、能验收
前端·后端
马可家的菠萝17 分钟前
你的微信“文件传输助手”,是不是已经成了第二个网盘?
前端·后端·架构
略略略啦18 分钟前
Vibe Coding 基于Spec DD和TDD的实践指南
前端
shmily麻瓜小菜鸡39 分钟前
前端实现图片与PDF文字识别敏感信息打码方案
前端·pdf·状态模式
打工仔折腾 AI44 分钟前
LangChain 工具调用实战:从 Tool 定义到 Agent 执行链路拆解
java·前端·人工智能·后端·python·langchain·ai agent 实战
汉堡大王95271 小时前
单次输出拉到100万Token:拆完 Gemini 4 Argon 的续写协议,才看懂谷歌这7个月在憋什么
前端·人工智能·后端
看浪的路人1 小时前
第9讲:大模型应用监控与可观测性——OpenTelemetry + Prometheus + Grafana 全链路追踪
java·前端·spring
内存过载1 小时前
用表格模拟甘特图:项目排期的土办法
前端·低代码
葡萄城技术团队1 小时前
用 SpreadJS 数据验证实现省市区三级联动
前端