vue拖拉换位置 transition-group

<template>
  <transition-group tag="div" class="container">
    <div
      class="item"
      v-for="item 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>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { key: 1, color: "#ffebcc" },

        { key: 2, color: "#ffb86c" },

        { key: 3, color: "#f01b2d" },
      ],

      dragging: null,
    };
  },
  computed: {
  
  },
  components: {},
  methods: {
    dddfotter() {
      this.$store.dispatch("dddfotter");
    },
    didefotter() {
      this.$store.dispatch("didefotter");
    },
      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 0.3s;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值