欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue实现div拖拽互换位置

程序员文章站 2023-01-20 14:10:22
本文实例为大家分享了vue实现div拖拽互换位置的具体代码,供大家参考,具体内容如下 template模板

本文实例为大家分享了vue实现div拖拽互换位置的具体代码,供大家参考,具体内容如下

template模板

<transition-group tag="div" class="container">
  <div class="item" v-for="(item,index) in items" :key="item.key" :style="{background:item.color,width:'80px',height:'80px'}"
    draggable="true"
  @dragstart="handledragstart($event, item)"
    @dragover.prevent="handledragover($event, item)"
    @dragenter="handledragenter($event, item)" 
    @dragend="handledragend($event, item)" >
  </div>
</transition-group>

script:

<script>
export default {
 name: 'toolbar',
 data () {
  return {
   items: [
    { key: 1, color: '#ffebcc'},
    { key: 2, color: '#ffb86c'},
    { key: 3, color: '#f01b2d'}
   ],
    
    dragging: null
  }
 },
 methods:{
  handledragstart(e,item){
    this.dragging = item;
  },
  handledragend(e,item){
    this.dragging = null
  },
  //首先把div变成可以放置的元素,即重写dragenter/dragover
  handledragover(e) {
    e.datatransfer.dropeffect = 'move'// e.datatransfer.dropeffect="move";//在dragenter中针对放置目标来设置!
  },
  handledragenter(e,item){
    e.datatransfer.effectallowed = "move"//为需要移动的元素设置dragstart事件
    if(item === this.dragging){
      return
    }
    const newitems = [...this.items]
    console.log(newitems)
    const src = newitems.indexof(this.dragging)
    const dst = newitems.indexof(item)
 
    newitems.splice(dst, 0, ...newitems.splice(src, 1))
 
    this.items = newitems
  }
 }
}
</script>
 
<style scoped>
  .container{
    width: 80px;
    height: 300px;
    position: absolute;
    left: 0;
    display:flex;
    flex-direction: column;
    padding: 0;
  }
  .item {
   margin-top: 10px;
   transition: all linear .3s
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。