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è)簡單的 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詳談Object.defineProperty 及實(shí)現(xiàn)數(shù)據(jù)雙向綁定
這篇文章主要介紹了詳談Object.defineProperty 及實(shí)現(xiàn)數(shù)據(jù)雙向綁定,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問題
這篇文章主要介紹了Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10