全栈开发

Vue拖拽事件实现穿梭框效果

2020-01-08  本文已影响0人  夏海峰
Vue拖拽

1、HTML代码

<div id='app'>
  <div class="wrap">
    <!-- .prevent表示阻止默认事件 -->
    <!-- .self指定事件仅对当前元素有效 -->
    <div class="left" @dragover.prevent='over' @drop.prevent.self='drop'>
      <!-- draggable属性,指定当前元素可拖拽 -->
      <div v-for="item in list1" draggable @dragstart='start' v-text='item'></div>
    </div>
    <div class="right" @dragover.prevent='over' @drop.prevent.self='drop'>
      <div v-for="item in list2" draggable @dragstart='start' v-text='item'></div>
    </div>
  </div>
</div>

2、CSS代码

.wrap {
  width: 800px;
  height: 100%;
  margin: 0 auto;
  border: 2px solid #ccc;
  display: flex;
}
.wrap>div {
  flex: 1;
  border: 1px solid #ccc;
  height: 1000px;
}
.wrap>div.left>div {
  background: rgba(100,0,0,0.5);
}
.wrap>div.right>div {
  background: rgba(0,0,100,0.5);
}
.wrap>div>div {
  line-height: 60px;
  text-align: center;
  border: 1px solid #ccc;
  margin: 5px;
  font-size: 20px;
  font-weight: bold;
}

3、JS 代码

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
// 创建vue实例
var app = new Vue({
  el: '#app',
  data: {
    list1: [1,2,3,4,5],
    list2: [6,7,8]
  },
  methods: {
    start(ev) {
      // 获取被拖拽的元素
      this.dom = ev.currentTarget
    },
    over(ev) {
      console.log('over')
    },
    drop(ev) {
      // 把被拖拽的元素追加到容器中去
      ev.target.appendChild(this.dom)
    }
  }
})
</script>

参考资源: HTML5 拖放

END 2020-01-08

上一篇下一篇

猜你喜欢

热点阅读