欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實(shí)現(xiàn)元素拖動(dòng)并互換位置的實(shí)現(xiàn)代碼

 更新時(shí)間:2023年09月07日 15:44:46   作者:宋承佑  
在使用Vue的場景下,需要實(shí)現(xiàn)對(duì)元素進(jìn)行拖動(dòng)交換位置,接下來通過本文給大家介紹vue實(shí)現(xiàn)元素拖動(dòng)并互換位置的實(shí)現(xiàn)代碼,需要的朋友可以參考下

項(xiàng)目場景:

在使用Vue的場景下,需要實(shí)現(xiàn)對(duì)元素進(jìn)行拖動(dòng)交換位置。

在這里插入圖片描述

需求分析:

1、兩兩交換的其實(shí)是數(shù)組的下標(biāo)。數(shù)據(jù)內(nèi)容不變。

2、拖拽功能需要用到一下API。

方法名詳解
ondraggable 設(shè)置元素是否允許被拖動(dòng)。鏈接和圖片默認(rèn)是可拖動(dòng),因此不用設(shè)置該屬性
ondragstart 用戶開始拖動(dòng)元素或選擇的文本時(shí)觸發(fā)。
ondragover 拖動(dòng)元素或選取的文本正在拖動(dòng)到放置目標(biāo)時(shí)觸發(fā)。默認(rèn)情況下,數(shù)據(jù)/元素不能放置到其他元素中。如果要實(shí)現(xiàn)改功能,我們需要防止元素的默認(rèn)處理方法。我們可以通過調(diào)用 event.preventDefault() 方法來實(shí)現(xiàn) ondragover 事件。
ondragenter 當(dāng)被鼠標(biāo)拖動(dòng)的對(duì)象進(jìn)入其容器范圍內(nèi)時(shí)觸發(fā)此事件
ondragend 用戶完成元素拖動(dòng)后觸發(fā)

關(guān)于更多的API介紹可以看點(diǎn)這里

代碼實(shí)現(xiàn):

<table>
	<thead>
		<tr>
			<th>標(biāo)題1</th>
			<th>標(biāo)題2</th>
			<th>標(biāo)題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;//開始拖動(dòng)時(shí),暫時(shí)保存當(dāng)前拖動(dòng)的數(shù)據(jù)。
            },
            handleDragEnd(e,items){
                this.dragging = null;//拖動(dòng)結(jié)束后,清除數(shù)據(jù)
            },
            handleDragOver(e) {
                e.dataTransfer.dropEffect = 'move';//在dragenter中針對(duì)放置目標(biāo)來設(shè)置!
            },
            handleDragEnter(e,items){
                e.dataTransfer.effectAllowed = "move";//為需要移動(dòng)的元素設(shè)置dragstart事件
                if(items == this.dragging) return;
                var newItems = [...this.dataList];//拷貝一份數(shù)據(jù)進(jìn)行交換操作。
                var src = newItems.indexOf(this.dragging);//獲取數(shù)組下標(biāo)
                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實(shí)現(xiàn)元素拖動(dòng)并互換位置的文章就介紹到這了,更多相關(guān)vue元素拖動(dòng)互換位置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論