vue實現(xiàn)元素拖動并互換位置的實現(xiàn)代碼
項目場景:
在使用Vue的場景下,需要實現(xiàn)對元素進行拖動交換位置。
需求分析:
1、兩兩交換的其實是數(shù)組的下標。數(shù)據(jù)內(nèi)容不變。
2、拖拽功能需要用到一下API。
方法名 | 詳解 |
---|---|
ondraggable | 設(shè)置元素是否允許被拖動。鏈接和圖片默認是可拖動,因此不用設(shè)置該屬性 |
ondragstart | 用戶開始拖動元素或選擇的文本時觸發(fā)。 |
ondragover | 拖動元素或選取的文本正在拖動到放置目標時觸發(fā)。默認情況下,數(shù)據(jù)/元素不能放置到其他元素中。如果要實現(xiàn)改功能,我們需要防止元素的默認處理方法。我們可以通過調(diào)用 event.preventDefault() 方法來實現(xiàn) ondragover 事件。 |
ondragenter | 當被鼠標拖動的對象進入其容器范圍內(nèi)時觸發(fā)此事件 |
ondragend | 用戶完成元素拖動后觸發(fā) |
關(guān)于更多的API介紹可以看點這里
代碼實現(xiàn):
<table> <thead> <tr> <th>標題1</th> <th>標題2</th> <th>標題3</th> </tr> </thead> <tbody> <tr v-for="(items,index) in dataList" :key="index" draggable="true" @dragstart="handleDragStart($event, items)" @dragover.prevent="handleDragOver($event, items)" @dragenter="handleDragEnter($event, items)" @dragend="handleDragEnd($event, items)" > <td>{{items.content}}</td> </tr> </tbody> </table> <script> var VM = new Vue({ el:'#app', data:function(){ return { dataList:[{ content:'內(nèi)容' },{ content:'內(nèi)容' },{ content:'內(nèi)容' }], dragging: null } }, methods:{ handleDragStart(e,items){ this.dragging = items;//開始拖動時,暫時保存當前拖動的數(shù)據(jù)。 }, handleDragEnd(e,items){ this.dragging = null;//拖動結(jié)束后,清除數(shù)據(jù) }, handleDragOver(e) { e.dataTransfer.dropEffect = 'move';//在dragenter中針對放置目標來設(shè)置! }, handleDragEnter(e,items){ e.dataTransfer.effectAllowed = "move";//為需要移動的元素設(shè)置dragstart事件 if(items == this.dragging) return; var newItems = [...this.dataList];//拷貝一份數(shù)據(jù)進行交換操作。 var src = newItems.indexOf(this.dragging);//獲取數(shù)組下標 var dst = newItems.indexOf(items); newItems.splice(dst, 0, ...newItems.splice(src, 1));//交換位置 this.dataList = newItems; } } }) </script>
關(guān)于Array.prototype.splice()
到此這篇關(guān)于vue實現(xiàn)元素拖動并互換位置的文章就介紹到這了,更多相關(guān)vue元素拖動互換位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
談?wù)刅UE種methods watch和compute的區(qū)別和聯(lián)系
本篇文章主要介紹了談?wù)刅UE種methods watch和compute的區(qū)別和聯(lián)系,具有一定的參考價值,有興趣的可以了解一下2017-08-08Vue?2源碼閱讀?Provide?Inject?依賴注入詳解
這篇文章主要為大家介紹了Vue?2源碼閱讀?Provide?Inject?依賴注入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08vuejs2.0實現(xiàn)分頁組件使用$emit進行事件監(jiān)聽數(shù)據(jù)傳遞的方法
這篇文章主要介紹了vuejs2.0實現(xiàn)分頁組件使用$emit進行事件監(jiān)聽數(shù)據(jù)傳遞的方法,非常不錯,具有參考借鑒價值,,需要的朋友可以參考下2017-02-02在vue中使用防抖和節(jié)流,防止重復(fù)點擊或重復(fù)上拉加載實例
今天小編就為大家分享一篇在vue中使用防抖和節(jié)流,防止重復(fù)點擊或重復(fù)上拉加載實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Vue加載讀取本地txt/json等文件的實現(xiàn)方式
這篇文章主要介紹了Vue加載讀取本地txt/json等文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10vscode配置vue下的es6規(guī)范自動格式化詳解
這篇文章主要介紹了vscode配置vue下的es6規(guī)范自動格式化詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03vue富文本框(插入文本、圖片、視頻)的使用及問題小結(jié)
這篇文章主要介紹了vue富文本框(插入文本、圖片、視頻)的使用及問題小結(jié),需要的朋友可以參考下2018-08-08