本文主要介绍了vue拖拽添加的简单实现,具体如下:
效果图
并没有判断是否重复,没有删除旧数据
数据体
<myshuttle :dataorigin='[ { name:"数据001", id:"数001", }, { name:"数据002", id:"数001", }, { name:"数据003", id:"数001", }]' :space='[{ name:"右001", id:"右001", }]' />
代码
draggable开启可拖动
@dragenter.prevent @dragover.prevent// 阻止浏览器默认行为,不然会显示一个叉叉,不好看
阻止默认行为
@dragleave.stop=“dragleave($event, ‘main')”
进入离开当前元素都会触发
@dragend.stop=“dragend($event, item)”
放下拖拽内容触发
标记这个很重要!!! 这个决定了拖拽事件的行为。当点击开始拖拽之后,鼠标点击所在的位置就是标记。
dragstart:当单击下鼠标,并移动之后执行。
drag:在dragstart执行之后,鼠标在移动时连续触发。
dragend:当拖拽行为结束,也就是松开鼠标的时候触发。
dragenter:当正在拖拽的元素的标记进入某个dom元素时触发,自身首先会触发。被进入的dom元素会触发这个事件。
dragover:当拖拽的元素的标记在进入的dom元素上移动时触发,在自身移动时也会触发。
dragleave:当拖拽的元素在离开进入的dom时触发。
h5拖拽属性 draggable
draggable:当需要某个元素可以拖拽时,需设置为true,默认为fal。选中的文本、图片、链接默认可以拖拽。
datatransfer对象:该属性用于保存拖放的数据和交互信息,该组件没有使用到,暂忽略。
当鼠标移动到目标div盒子才会追加,简单的才最能说明问题
<template> <div class="myshuttle"> <div class="myshuttleleft"> <div class="title">数据源</div> <div class="databox" @dragleave.stop="dragleave($event, 'main')"> <div v-for="(item, i) in dataorigin" :key="i" class="datalist" draggable @dragenter.prevent @dragover.prevent @dragstart.stop="dragstart($event, item)" @dragend.stop="dragend($event, item)"> {{ item.name}} </div> </div> </div> <div class="myshuttlecenter"></div> <div class="myshuttleright"> <div class="title">数据源</div> <div ref="myshuttleright" class="databox"> <div v-for="(item, i) in spacelist" :key="i" class="datalist" draggable @dragenter.prevent @dragover.prevent> {{ item.name}} </div> </div> &元旦辞旧迎新的诗句lt;/div> </div></template><script>export default { name: '', components: {}, props: { dataorigin: { type: array }, space: { type: array } }, data() { return { spacelist: this.space, isdragstatus: fal } }, computed: {}, watch: {}, created() { }, mounted() { }, methods: { dragleave(e, item) { // console.log(e, item) if (item === 'main') { this.isdragstatus = true } el { this.isdragstatus = fal } // console.log(this.isdragstatus) }, dragstart(e, item) { // console.log(e, item) }, dragend(e, item) { const top = this.$refs.myshuttleright.getboundingclientrect().top const right = this.$refs.myshuttleright.getboundingclientrect().right const bottom = this.$refs.myshuttleright.getboundingclientrect().bottom const left = this.$refs.myshuttleright.getboundingclientrect().left console.log(top, right, bottom, left) console.log(e.clientx, e.clienty, item) if (this.isdragstatus && e.clienty > top && e.clienty < bottom && e.clientx > left && e.clientx < right) { this.spacelist.push(item) console.log(this.spacelist.indexof(item)) } } }}</script><style scoped lang="scss"医德考评自我评价>.myshuttle { width: 100%; height: 308px; display: flex; justify-content: space-between; // 左右盒子公共样式 .myshuttleleft, .myshuttleright { border: 1px solid #dddddd; 石器联萌 border-collap: collap; .title { box-sizing: border-box; width: 100%; height: 40px; background: #f5f5f5; border-radius: 4px 4px 0px 0px; border-bottom: 1px solid #dddddd; padding: 10px 16px; font-size: 14px; font-family: pingfangsc-regular, pingfang sc; font-weight: 400; color: #333333; line-height: 20px; } .databox { width: 100%; height: 228px; overflow: auto; padding: 6px 0; .datalist { width: 96%; height: 40px; box-sizing: border-box; font-size: 14px; font-family: pingfangsc-regular, pingfang sc; font-weight: 400; color: #666; line-height: 20px; margin: 0 2% 10px; padding: 10px 16px; border: 1px solid #ddd; border-radius: 4px; ur-lect: none; cursor: pointer; &:hover { color: #01bc77; background: rgba(1, 188, 1信念的名人素材19, 0.1); } } } } .myshuttle乐器排名left { width: 362px; height: 100%; background: #ffffff; border-radius: 4px; } .myshuttlecenter { width: 64px; height: 100%; } .myshuttleright { width: 362px; height: 100%; background: #ffffff; border-radius: 4px; }}</style>
到此这篇关于vue拖拽添加的简单实现的文章就介绍到这了,更多相关vue拖拽添加内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 11:46:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/be95a215761324970c80e07233741091.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:vue拖拽添加的简单实现.doc
本文 PDF 下载地址:vue拖拽添加的简单实现.pdf
留言与评论(共有 0 条评论) |