vue利用html5拖放实现拖拽
HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。
一、拖拽事件
1、drag:当拖动元素或选中的文本时触发。
2、dragend:当拖拽操作结束时触发
3、dragenter:当拖动元素或选中的文本到一个可释放目标时触发
4、dragexit:当元素变得不再是拖动操作的选中目标时触发
5、dragleave:当拖动元素或选中的文本离开一个可释放目标时触发
6、dragover:当元素或选中的文本被拖到一个可释放目标上时触发(每100毫秒触发一次)
7、dragstart:当用户开始拖动一个元素或选中的文本时触发
8、drop:当元素或选中的文本在可释放目标上被释放时触发
二、拖拽接口
dragEvent:是一个表示拖、放交互的一个DOM event接口,它有一个构造函数和一个dataTransfer属性,dataTransfer 属性是一个DataTransfer 对象。
DataTransfer对象包含了拖拽事件的状态,例如拖动事件的类型(如拷贝 copy
或者移动 move
),拖动的数据(一个或者多个项)和每个拖动项的类型(MIME类型)。 DataTransfer对象也有向拖动数据中添加或删除项目的方法。
三、vue中代码实现
<template><transition-group tag="div" name="drag" class="box">
<div
v-for="(item, index) in list"
:key="item"
class="item"
:draggable="true"
@dragstart="dragStart($event, index)"
@dragover="allowDrop"
@drop="drop($event, index, list)"
>
{{ item }}
</div>
</transition-group>
</template>
<script>
export default {
data() {
return {
list: [1, 2, 3, 4, 5, 6, 7, 8, 9]
};
},
methods: {
//取消默认行为
allowDrop(e) {
e.preventDefault();
},
//开始拖动
dragStart(e, index) {
e.dataTransfer.setData("index", index);
},
//放置
drop(e, index, data) {
this.allowDrop(e);
const dragIndex = e.dataTransfer.getData("index");
const temp = data.splice(dragIndex, 1);
data.splice(index, 0, temp[0]);
}
}
};
</script>
<style scoped>
.box {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
width: 330px;
margin: 0 auto;
}
.item {
width: 100px;
height: 100px;
border: 1px solid #ccc;
margin-bottom: 10px;
line-height: 100px;
text-align: center;
}
.drag-move {
transition: transform 1s;
}
</style>
以上是 vue利用html5拖放实现拖拽 的全部内容, 来源链接: utcz.com/z/375029.html