vuedraggable拖拽删除实现

838 阅读1分钟

vuedraggable做组件化拖拽实现了排序,但是想实现拖拽到某一个位置进行删除, 看了官方文档没有相关的demo

简单实现的demo

screenshots.gif

看了一个demo是两个vuedraggable组件可以进行拖拽移动,这个时候有了一个想法,将其vuedraggable组件隐藏 (opacity:0,z-index:9999) 起来不就可以了,拖拽开始时就把对应的delete元素展示出来,结束再隐藏起来,

关键代码

<template>
  <div class="dragList-list2">
    <div id="picBox" class="dragList-list2" :style="{background:config.backgroundColor}">
      <Draggable v-bind="$attrs" class="dragArea" id="draggaBox" :list="list" item-key="id" group="TpFormGroup" :disabled="false" @start="start" @end="end" @move='onMove'>
        <template #item="{ element }">
          <div>
            <component :config="config" :is="element.com" :options='element' @changeJson="changeJson(element,ContentSetting,$event)"></component>
          </div>
        </template>
      </Draggable>
      <Tabbar :config="config" @click="changeJson('',TabbarSetting)"></Tabbar>
    </div>
    <Draggable :list="state.list2" class="deleteBox" item-key="id" group="TpFormGroup" :disabled="false" @start="start2" @end="end2">
      <template #item="{ element }">
        <div>{{element.name}}</div>
      </template>
    </Draggable>
    <div v-if="state.remove" class="delete">delete</div>
  </div>
</template>

//拖拽开始显示delete
const start = (e) => {
  state.remove=true
};
//拖拽结束隐藏delete
const end = (e) => {
  state.remove=false
};

.deleteBox {
  position: absolute;
  right: -160px;
  width: 100px;
  height: 100px;
  opacity: 0;
  z-index: 99999;
}
.delete {
  visibility: visible;
  height: 100px;
  position: absolute;
  width: 100px;
  right: -160px;
  background-color: red;
}