useSortable
用于 sortable
的包装器。
有关可以传递哪些选项的更多信息,请参阅 Sortable
文档中的 Sortable.options
。
演示
在 @vueuse/integrations 附加组件中可用。安装
bash
npm i sortablejs@^1
用法
使用模板引用
vue
<script setup lang="ts">
import { useSortable } from '@vueuse/integrations/useSortable'
import { ref } from 'vue'
const el = ref<HTMLElement | null>(null)
const list = ref([{ id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }])
useSortable(el, list)
</script>
<template>
<div ref="el">
<div v-for="item in list" :key="item.id">
{{ item.name }}
</div>
</div>
</template>
使用指定要操作的选择器
vue
<script setup lang="ts">
import { useSortable } from '@vueuse/integrations/useSortable'
import { ref } from 'vue'
const el = ref<HTMLElement | null>(null)
const list = ref([{ id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }])
const animation = 200
const { option } = useSortable(el, list, {
handle: '.handle',
// or option set
// animation
})
// You can use the option method to set and get the option of Sortable
option('animation', animation)
// option('animation') // 200
</script>
<template>
<div ref="el">
<div v-for="item in list" :key="item.id">
<span>{{ item.name }}</span>
<span class="handle">*</span>
</div>
</div>
</template>
使用选择器获取根元素
vue
<script setup lang="ts">
import { useSortable } from '@vueuse/integrations/useSortable'
import { ref } from 'vue'
const list = ref([{ id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }])
useSortable('#dv', list)
</script>
<template>
<div id="dv">
<div v-for="item in list" :key="item.id">
<span>{{ item.name }}</span>
</div>
</div>
</template>
提示
如果要自己处理 onUpdate,可以传入 onUpdate 参数,我们还公开了移动项目位置的函数。
ts
import { moveArrayElement } from '@vueuse/integrations/useSortable'
useSortable(el, list, {
onUpdate: (e) => {
// do something
moveArrayElement(list.value, e.oldIndex, e.newIndex, e)
// nextTick required here as moveArrayElement is executed in a microtask
// so we need to wait until the next tick until that is finished.
nextTick(() => {
/* do something */
})
}
})
类型声明
显示类型声明
typescript
export interface UseSortableReturn {
/**
* start sortable instance
*/
start: () => void
/**
* destroy sortable instance
*/
stop: () => void
/**
* Options getter/setter
* @param name a Sortable.Options property.
* @param value a value.
*/
option: (<K extends keyof Sortable.Options>(
name: K,
value: Sortable.Options[K],
) => void) &
(<K extends keyof Sortable.Options>(name: K) => Sortable.Options[K])
}
export type UseSortableOptions = Options & ConfigurableDocument
export declare function useSortable<T>(
selector: string,
list: MaybeRefOrGetter<T[]>,
options?: UseSortableOptions,
): UseSortableReturn
export declare function useSortable<T>(
el: MaybeRefOrGetter<HTMLElement | null | undefined>,
list: MaybeRefOrGetter<T[]>,
options?: UseSortableOptions,
): UseSortableReturn
/**
* Inserts a element into the DOM at a given index.
* @param parentElement
* @param element
* @param {number} index
* @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L81C1-L94C2
*/
export declare function insertNodeAt(
parentElement: Element,
element: Element,
index: number,
): void
/**
* Removes a node from the DOM.
* @param {Node} node
* @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L96C1-L102C2
*/
export declare function removeNode(node: Node): void
export declare function moveArrayElement<T>(
list: MaybeRefOrGetter<T[]>,
from: number,
to: number,
e?: Sortable.SortableEvent | null,
): void
源代码
贡献者
Anthony Fu
丶远方
Doctorwu
IlyaL
David Gonzalez
Anthony Fu
Tycho
George Kinsman
更改日志
v12.0.0-beta.1
于 2024/11/21v11.3.0
于 2024/11/21v10.8.0
于 2024/2/20a086e
- fix: 更严格的类型v10.6.0
于 2023/11/9v10.4.0
于 2023年8月25日v10.2.0
于 2023年6月16日v10.0.0-beta.4
于 2023年4月13日4d757
- 特性(类型)!: 将 MaybeComputedRef
重命名为 MaybeRefOrGetter
0a72b
- 特性(toValue): 将 resolveUnref
重命名为 toValue
v10.0.0-beta.3
于 2023年4月12日v10.0.0-beta.0
于 2023年3月14日