這篇文章主要講解了“HTML
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)建站擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。
樣式同前
ul.item {
list-style-type: disc;
margin-block-start: 0;
margin-block-end: 0;
margin-inline-start: 0;
margin-inline-end: 0;
padding-inline-start: 0;
}
.item li {
height: 50px;
line-height: 50px;
border: 1px solid #aaaaaa;
width: 200px;
padding: 0 10px;
display: flex;
align-items: center;
}
先把DOM渲染出來
new Vue({
el: "#drag",
data: {
draggingItem: null,
lastItem: null,
items: Array.from({ length: 5 }, (_item, index) => ({
key: index + 1 + "",
name: "Item" + (index + 1),
})),
},
});
模板是異常的簡單
{{item.name}}
然后可以在
當(dāng)然也要加上配套的樣式
.flip-list-move {
transition: transform 0.3s;
}
下面就是給子元素加上事件了
@dragstart="dragstart(item)" @dragover="dragover(item)">
{{item.name}}
就兩個(gè)事件
dragstart: function (item) {
this.draggingItem = item;
},
dragover: function (item) {
if (item !== this.draggingItem && this.lastItem !== item) {
const fromIndex = this.items.indexOf(this.draggingItem);
const toIndex = this.items.indexOf(item);
const temp = this.items[fromIndex];
this.items[fromIndex] = this.items[toIndex];
this.items[toIndex] = temp;
this.items = […this.items];
}
this.lastItem = item;
}
這里我和之前的寫法略作了改動(dòng),判斷拖動(dòng)元素和拖入元素不是同一個(gè),還判斷了拖入元素和上次拖入元素也不是同一個(gè),不然會(huì)發(fā)生不停抖動(dòng)的情況,因?yàn)橥蟿?dòng)的時(shí)候發(fā)生了元素移動(dòng),導(dǎo)致反復(fù)觸發(fā)dragover事件。
注意最后這里的this.items = […this.items],因?yàn)樯厦媸侵苯釉谒饕闲薷臄?shù)組元素的,而Vue2的響應(yīng)式對(duì)數(shù)組在索引上的修改察覺不到,所以重新給this.items賦值,不過好在有key的加持,Vue只會(huì)針對(duì)修改的部分進(jìn)行更新,無須擔(dān)心性能問題。
整個(gè)的解決方案把所有HTML、CSS代碼都算入也就不滿80行,讓我切切實(shí)實(shí)感受到了
感謝各位的閱讀,以上就是“HTML