Skip to content

API

使用说明

所有以 on 开头的事件函数,都可以以 v-on 的方式传递给组件,例如:

vue
<template>
  <VueDraggable v-model="list" @start="onStart" @end="onEnd">
    <div v-for="item in list" :key="item.id">
      {{ item.name }}
    </div>
  </VueDraggable>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { VueDraggable, DraggableEvent } 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(event: DraggableEvent) {
  console.log('开始拖拽')
}

function onEnd(event: DraggableEvent) {
  console.log('拖拽结束')
}
</script>

Hooks 及指令使用请参考文档

类型

ts

type SortableMethod = 'closest' | 'save' | 'toArray' | 'destroy' | 'option'

/**
 * useDraggable 返回值
 */
export interface UseDraggableReturn extends Pick<Sortable, SortableMethod> {
  /**
   * 启动拖拽
   * @param {HTMLElement} target - 指定拖拽的元素
   * @default - 组件根元素,参考 [指定目标容器](/demo/target-container/),默认为组件根元素
   */
  start: (target?: HTMLElement) => void
  /**
   * 暂停拖拽
   */
  pause: () => void
  /**
   * 恢复拖拽
   */
  resume: () => void
}

export interface UseDraggableOptions<T> extends Options {
  clone?: (element: T) => T
  immediate?: boolean
  customUpdate?: (event: DraggableEvent) => void
}

interface DraggableEvent<T = any> extends DraggableEvent {
  data: T
  clonedData: T
}

Options

Options 继承自 Sortablejs 所有的配置项,具体请查看 Sortablejs 官方文档

ts
type Easing =
  | 'steps(int, start | end)'
  | 'cubic-bezier(n, n, n, n)'
  | 'linear'
  | 'ease'
  | 'ease-in'
  | 'ease-out'
  | 'ease-in-out'
  | 'step-start'
  | 'step-end'
  | 'initial'
  | 'inherit'

type PullResult = ReadonlyArray<string> | boolean | 'clone'
type PutResult = ReadonlyArray<string> | boolean

interface GroupOptions {
  /**
   * 组名
   */
  name: string
  /**
   * 从列表中移动的能力。克隆——复制项目,而不是移动。
   */
  pull?: PullResult | ((to: Sortable, from: Sortable, dragEl: HTMLElement, event: SortableEvent) => PullResult) | undefined;
  /**
   * 是否可以从其他列表中添加元素,或者可以从中获取元素的组名数组。
   */
  put?: PutResult | ((to: Sortable, from: Sortable, dragEl: HTMLElement, event: SortableEvent) => PutResult) | undefined;
  /**
   * 移动到另一个列表后,将克隆的元素恢复到初始位置。
   */
  revertClone?: boolean | undefined
}

type Group = string | GroupOptions | undefined

type ScrollFn =
  | ((
      this: Sortable,
      offsetX: number,
      offsetY: number,
      originalEvent: Event,
      touchEvt: TouchEvent,
      hoverTargetEl: HTMLElement
    ) => 'continue' | void)
  | undefined
参数说明类型默认值
animation拖动时显示动画Number0
chosenClass被选中项的 css 类名String'sortable-chosen'
delay选中拖拽延时Number0
delayOnTouchOnlytouch 事件延迟Number0
direction拖拽方向,默认自动判断。可选值有horizontalverticalString-
disabled是否禁止拖拽Booleanfalse
dragClass拖拽项类名String'sortable-drag'
draggable指定元素内的哪些项目应该是可拖动的String-
emptyInsertThreshold拖动时鼠标必须与空可排序项的距离(以像素为单位),以便将拖动元素插入到该可排序项中, 设置为0禁用此功能。Number5
easing简化动画。Easing-
fallbackClass当使用 forceFallback 的时候,被复制的 dom 的 css 类名Stringsortable-fallback
fallbackOnBody将 cloned DOM 元素挂到 body 元素上。Booleanfalse
fallbackTolerance以像素为单位指定鼠标在被视为拖动之前应该移动多远。Number0
filter不需要进行拖动的元素String-
forceFallback忽略 HTML5 拖拽行为,强制回退Booleanfalse
ghostClassdrop placeholder 的 css 类名String'sortable-ghost'
group要将元素从一个列表拖到另一个列表中,两个列表必须具有相同的group 值。您还可以定义列表是否可以被移出、或者克隆以及接收其他列表元素。详情查阅上方 TS 类型定义Group-
handle设置可拖拽句柄的 css 类名,如果不设置,默认对目标元素的子列表操作进行拖拽String-
invertSwap如果设置为 true,将始终使用反向交换区Booleanfalse
invertedSwapThreshold反向交换阈值,默认情况下将设置为swapThresholdNumber-
preventOnFilter触发 filter 时调用 event.preventDefault()Booleantrue
removeCloneOnHide删除不显示的克隆元素,而不是仅仅隐藏它Booleantrue
sort定义列表单元是否可以在列表容器内进行拖拽排序Booleantrue
swapThreshold交换区的阈值Number1
touchStartThreshold在取消延迟拖动事件之前点应该移动多少像素Number1
setData传递一个函数,函数的第一个参数为DataTransfer类型,第二个参数为HTMLElement 类型Function
scroll是否启用滚动Boolean or HTMLElementtrue
scrollFn自定义滚动ScrollFn-
scrollSensitivity鼠标必须离边缘多近才能开始滚动,单位 pxNumber-
scrollSpeed滚动速度(ms/px)number-
bubbleScroll将自动滚动应用于所有父元素,以便更轻松地移动Booleantrue
onChoose元素被选中((event: DraggableEvent) => void)-
onUnchoose元素取消选中((event: DraggableEvent) => void)-
onStart元素开始拖拽((event: DraggableEvent) => void)-
onEnd元素取消拖拽((event: DraggableEvent) => void)-
onAdd元素从一个列表拖拽到另一个列表((event: DraggableEvent) => void)-
onUpdate元素顺序更新时触发((event: DraggableEvent) => void)-
onSort列表的任何更改都会触发((event: DraggableEvent) => void)-
onRemove元素从列表中移除进入另一个列表((event: DraggableEvent) => void)-
onFilter试图拖拽一个 filtered 的元素((event: DraggableEvent) => void)-
onMove拖拽移动的时候触发((event: MoveEvent,originalEvent: Event) => void)-
onClone克隆一个元素时触发((event: DraggableEvent) => void)-
onChange拖拽元素改变位置时触发((event: DraggableEvent) => void)-

Component (组件属性)

Props

组件的 props 包含 Sortablejs 的所有 options,都可以传递给组件,具体请查看 Options

参数描述必传默认值
modelValue(v-model)双向绑定的列表-
tag组件渲染的根元素标签名div
target指定目标容器,未传递时以组件为根元素,详见 指定目标容器-

插槽

名称说明参数
default默认插槽UseDraggableReturn