vue使用vuedraggable對(duì)列表進(jìn)行拖拽排序
vuedraggable 是一個(gè)基于 Vue 的拖拽排序組件,它可以讓你輕松地在 Vue 應(yīng)用中實(shí)現(xiàn)拖拽排序功能。vuedraggable 底層是基于 Sortable.js 實(shí)現(xiàn)的,它支持排序、拖拽、交換等操作。
安裝 vuedraggable
通過 npm 安裝
如果你使用的是 npm,可以通過以下命令安裝 vuedraggable:
npm install vuedraggable
通過 CDN 引入
如果你不想使用 npm,可以直接通過 CDN 引入:
<script src="https://cdn.jsdelivr.net/npm/vuedraggable@next"></script>
基本用法
以下是一個(gè)簡(jiǎn)單的 vuedraggable 使用示例,展示了如何在 Vue 組件中實(shí)現(xiàn)一個(gè)可拖拽排序的列表。
示例 1:基本的拖拽排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vuedraggable 示例</title>
</head>
<body>
<div id="app">
<draggable v-model="items" :group="{ name: 'items' }" :animation="200">
<div v-for="item in items" :key="item.id" class="item">
{{ item.name }}
</div>
</draggable>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
<script src="https://cdn.jsdelivr.net/npm/vuedraggable@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' },
{ id: 4, name: 'Item 4' },
],
};
},
});
app.mount("#app");
</script>
</body>
</html>
代碼解釋:
v-model="items":將組件的數(shù)據(jù)與父組件綁定。在此案例中,items 是一個(gè)數(shù)組,存儲(chǔ)了所有的列表項(xiàng)。
:group="{ name: 'items' }":指定拖拽排序的組。如果你有多個(gè) draggable 列表,并希望它們之間能夠拖拽排序,可以使用 group 來指定組。
:animation="200":設(shè)置拖拽時(shí)的動(dòng)畫效果,單位為毫秒。
進(jìn)階用法
示例 2:實(shí)現(xiàn)多個(gè)列表的拖拽排序(跨列表拖拽)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vuedraggable 示例</title>
</head>
<body>
<div id="app">
<div class="list-container">
<div class="list">
<h3>List 1</h3>
<draggable v-model="list1" :group="{ name: 'items', pull: 'clone', put: true }">
<div v-for="item in list1" :key="item.id" class="item">
{{ item.name }}
</div>
</draggable>
</div>
<div class="list">
<h3>List 2</h3>
<draggable v-model="list2" :group="{ name: 'items', pull: false, put: true }">
<div v-for="item in list2" :key="item.id" class="item">
{{ item.name }}
</div>
</draggable>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
<script src="https://cdn.jsdelivr.net/npm/vuedraggable@next"></script>
<script>
const app = Vue.createApp({
data() {
return {
list1: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
],
list2: [
{ id: 3, name: 'Item 3' },
{ id: 4, name: 'Item 4' },
],
};
},
});
app.mount("#app");
</script>
<style>
.list-container {
display: flex;
gap: 20px;
}
.list {
width: 200px;
border: 1px solid #ccc;
padding: 10px;
}
.item {
padding: 5px;
margin: 5px;
background-color: #f0f0f0;
cursor: pointer;
}
</style>
</body>
</html>
代碼解釋:
在這個(gè)例子中,我們有兩個(gè)列表 list1 和 list2,并使用了 vuedraggable 來使得它們之間能夠?qū)崿F(xiàn)拖拽排序。
pull: 'clone' 表示你可以從 list1 拖動(dòng)項(xiàng)目并將其克隆到目標(biāo)列表(list2)。 put: true 允許你將項(xiàng)目放入目標(biāo)列表。
pull: false 表示不允許從 list2 拖動(dòng)項(xiàng)目到 list1。
常用屬性和事件
v-model:用于雙向綁定拖拽的數(shù)據(jù)。group:指定拖拽的組,支持name,pull,put屬性。name: 同一組的列表可以相互拖拽。pull: 定義該列表是否可以拖動(dòng)元素到其它列表(clone代表克隆元素)。put: 定義該列表是否允許接收元素。
animation:設(shè)置拖拽時(shí)的動(dòng)畫效果,單位為毫秒。disabled:禁用拖拽功能。ghostClass:設(shè)置拖拽過程中元素的 CSS 類。
事件:
@start:拖動(dòng)開始時(shí)觸發(fā)。@end:拖動(dòng)結(jié)束時(shí)觸發(fā)。@change:拖動(dòng)排序完成時(shí)觸發(fā)。
到此這篇關(guān)于vue使用vuedraggable對(duì)列表進(jìn)行拖拽排序的文章就介紹到這了,更多相關(guān)vue vuedraggable列表拖拽排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 驗(yàn)證碼界面實(shí)現(xiàn)點(diǎn)擊后標(biāo)灰并設(shè)置div按鈕不可點(diǎn)擊狀態(tài)
今天小編就為大家分享一篇vue 驗(yàn)證碼界面實(shí)現(xiàn)點(diǎn)擊后標(biāo)灰并設(shè)置div按鈕不可點(diǎn)擊狀態(tài),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
Vue3 獲取當(dāng)前組件實(shí)例及場(chǎng)景分析
在Vue 3中,getCurrentInstance是一個(gè)用于獲取當(dāng)前組件實(shí)例的重要函數(shù),以下是對(duì)getCurrentInstance的詳細(xì)分析,感興趣的朋友一起看看吧2024-12-12
詳談Object.defineProperty 及實(shí)現(xiàn)數(shù)據(jù)雙向綁定
這篇文章主要介紹了詳談Object.defineProperty 及實(shí)現(xiàn)數(shù)據(jù)雙向綁定,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問題
這篇文章主要介紹了Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

