最近有个需求是需要在web端定制手机的界面UI(具体实现比较复杂,此处不做阐述,此文章只说明拖拽效果实现),为了方便用户操作,就想实现这种效果:从右侧的图标列表中拖拽图标到左侧模拟的手机界面上,实现效果图如下:
拖拽效果示例代码(使用了H5的拖拽属性):
<template>
<div>
<div
draggable="true"
style="height: 100px; width: 200px; color: red"
@drag="drag($event)"
@dragend="dragend($event)"
@dragstart="dragstart($event, dataStart)"
>
{{ dataStart }} [tip: 拖动我到目的地]
</div>
<div style="height: 100px; width: 200px; color: blue" draggable="false" @dragleave="dragleave($event)" @dragover="dragover($event)" @drop="drop($event)">
<span>目的地:{{ dataEnd }}</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
dataStart: 'Hello World',
dataEnd: '拖到我这里停止',
}
},
methods: {
dragstart(e, data) {
//【开始拖动,并获取拖动的对象】
console.log('拖拽开始')
console.log(data)
},
drag(e) {
console.log('拖拽中')
},
dragend(e) {
console.log('拖拽结束')
},
dragleave(e) {
console.log('拖拽离开')
},
dragover(e) {
//【拖拽结束,此处一般不放其他代码】
e.preventDefault()
console.log('拖拽到这')
},
drop(e) {
console.log('拖拽停止')
//此处才算拖拽成功
alert('松手!')
//执行后续代码逻辑
this.dataEnd = this.dataStart
},
},
}
</script>
<style scoped></style>
实际使用中,一般只需使用到dragstart、dragover、drop即可,拖拽对象/区域使用dragstart,目标对象/区域使用drop,使用这个简单拖拽效果可以实现很多复杂好用的功能。