vue element el-transfer增加拖拽功能
芯資管項(xiàng)目要求el-transfer增加拖拽排序,左右上下互相拖拽功能;
原來的組件不支持拖拽,這里要用個(gè)第三方脫宅組件sortablejs
首先安裝
sudo npm i sortablejs --save-dev
html代碼
<template>
<el-transfer ref="transfer" id="transfer" v-model="value" :data="data">
<span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
</el-transfer>
</template>```
create
<script>
import Sortable from 'sortablejs'
export default {
data() {
const generateData = _ => {
const data = []; for (let i = 1; i <= 15; i++) {
data.push({
key: i,
label: `備選項(xiàng) ${i}`,
disabled: i % 4 === 0 });
} return data;
}; return {
data: generateData(),
value: [1, 4],
draggingKey : null }
},
mounted() {
const transfer = this.$refs.transfer.$el
const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
const rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
Sortable.create(rightEl,{
onEnd: (evt) => {
const {oldIndex,newIndex} = evt;
const temp = this.value[oldIndex]
if (!temp || temp === 'undefined') {
return
}// 解決右邊最后一項(xiàng)從右邊拖左邊,有undefined的問題
this.$set(this.value,oldIndex,this.value[newIndex])
this.$set(this.value,newIndex,temp)
}
})
const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
Sortable.create(leftEl,{
onEnd: (evt) => {
const {oldIndex,newIndex} = evt;
const temp = this.data[oldIndex]
if (!temp || temp === 'undefined') {
return
} // 解決右邊最后一項(xiàng)從右邊拖左邊,有undefined的問題
this.$set(this.data,oldIndex,this.data[newIndex])
this.$set(this.data,newIndex,temp)
}
})
leftPanel.ondragover = (ev) => {
ev.preventDefault()
}
leftPanel.ondrop = (ev) => {
ev.preventDefault();
const index = this.value.indexOf(this.draggingKey) if(index !== -1){ this.value.splice(index,1)
}
}
rightPanel.ondragover = (ev) => {
ev.preventDefault()
}
rightPanel.ondrop = (ev) => {
ev.preventDefault(); if(this.value.indexOf(this.draggingKey) === -1){ this.value.push(this.draggingKey)
}
}
},
methods: {
drag(ev,option) { this.draggingKey = option.key
}
}
}
</script>
到此這篇關(guān)于vue element el-transfer增加拖拽功能的文章就介紹到這了,更多相關(guān)element el-transfer拖拽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue+abp微信掃碼登錄的實(shí)現(xiàn)代碼示例
- 如何封裝Vue Element的table表格組件
- vue+element table表格實(shí)現(xiàn)動(dòng)態(tài)列篩選的示例代碼
- vue element和nuxt的使用技巧分享
- vue+elementui通用彈窗的實(shí)現(xiàn)(新增+編輯)
- vue+element UI實(shí)現(xiàn)樹形表格
- vue+elementUI動(dòng)態(tài)增加表單項(xiàng)并添加驗(yàn)證的代碼詳解
- vue使用element-ui實(shí)現(xiàn)表單驗(yàn)證
- Vue Element前端應(yīng)用開發(fā)之整合ABP框架的前端登錄
相關(guān)文章
vue如何通過image-conversion實(shí)現(xiàn)圖片壓縮詳解
在Vue項(xiàng)目中上傳大圖片時(shí),可以通過image-conversion庫(kù)壓縮至指定大小,這篇文章主要介紹了vue如何通過image-conversion實(shí)現(xiàn)圖片壓縮的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
vue使用svg文件補(bǔ)充-svg放大縮小操作(使用d3.js)
這篇文章主要介紹了vue使用svg文件補(bǔ)充-svg放大縮小操作(使用d3.js),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
el-upload多選文件上傳報(bào)錯(cuò)解決方案
本文主要介紹了el-upload多選文件上傳報(bào)錯(cuò)解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
vue 監(jiān)聽是否切屏和開啟小窗的實(shí)現(xiàn)過程
這篇文章主要介紹了vue 監(jiān)聽是否切屏和開啟小窗的過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
nuxt框架中路由鑒權(quán)之Koa和Session的用法
后臺(tái)管理頁(yè)面需要有登錄系統(tǒng),所以考慮做一下路由鑒權(quán),這篇文章主要介紹了nuxt框架中路由鑒權(quán)之Koa和Session的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法
本篇文章主要介紹了使用vue-cli(vue腳手架)快速搭建項(xiàng)目的方法,vue-cli 是一個(gè)官方發(fā)布 vue.js 項(xiàng)目腳手架,使用 vue-cli 可以快速創(chuàng)建 vue 項(xiàng)目,感興趣的小伙伴們可以參考一下2018-05-05

