首页 > 技术文章 > vue中多张图片的随意拖拽

menxiaojin 2020-09-29 10:15 原文

近期项目中遇到多张图片随意拖拽解决图片排序,方便后台按顺序保存问题,特此记录一下,亲测可用

实现的效果如下:

 

 

 

html中:

<transition-group tag="div">
  <div class="item" v-for="(item,index) in items" :key="index" style="display: inline-block"
     draggable="true" @dragstart="handleDragStart($event, item)"  @dragover.prevent="handleDragOver($event, item)"
     @dragenter="handleDragEnter($event, item)"   @dragend="handleDragEnd($event, item)" >
       <div style="margin-top: 10px">
         <a :href="item" target="_blank">
            <img :src="item" style="width: 120px; height: 120px">
         </a>
     <div style=" background-image: url(/static/images/delete.png); width: 20px;height: 20px;
          -moz-background-size:100% 100%;background-size:100% 100%;
           position: relative; left: -15px; top: -50px;display: inline-block" @click="removeThumbnail(index)"></div>
       </div>
   </div>
</transition-group>

script代码:

<script>
export default {
 name: 'Toolbar',
 data () {
  return {
   items: [
    "/static/uploads/af/43/af43e036-f463-4f84-8e8e-ace11c612d6b.jpg",
    "/static/uploads/f0/0a/f00ab360-b8ef-4f14-b29c-9fda2234c6ce.jpg",
    "/static/uploads/e8/f9/e8f930b6-2210-4532-abc9-559033a2c1f0.jpg",
    "/static/uploads/d2/0e/d20e6e4a-afae-49ef-a308-ca2d410a6b6b.jpg"

    ],
    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
   console.log(this.items)  //这里是返回的图片的排序
    }
  } 
} 
</script>

 

推荐阅读