首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使副本成为拖放组件

使副本成为拖放组件
EN

Stack Overflow用户
提问于 2021-07-31 17:14:05
回答 1查看 96关注 0票数 0

目前我有两块板和一张卡。我可以将卡片从一个拖到另一个,反之亦然。

现在,当我拖动而不是移动实际的卡片时,我正在尝试制作卡片的副本。

要拖拽东西的主板:

代码语言:javascript
复制
<template>
    <div
        :id="id"
        class="board"
        @dragover.prevent
        @drop.prevent="drop"
    >
        <slot />
    </div>
</template>

<script>
export default {
    props:['id'],
    methods: {
        drop: e => {
            const card_id = e.dataTransfer.getData('card_id');

            const card = document.getElementById(card_id);

            card.style.display = "block"

            e.target.appendChild(card);
        }
    }
} 
</script>

我从中拖拽东西的餐具柜:

代码语言:javascript
复制
<template>
    <div
        :id="id"
        class="test"
        @dragover.prevent
        @drop.prevent="drop"
    >
        <slot />
    </div>
</template>

<script>
export default {
    props:['id'],
    methods: {
        drop: e => {
            const card_id = e.dataTransfer.getData('card_id');

            const card = document.getElementById(card_id);

            card.style.display = "block"

            e.target.appendChild(card);
        }
    },
    data(){
        return{
            title:'test'
        }
    }
} 
</script>

卡片:

代码语言:javascript
复制
<template>
    <div 
        :id="id"
        class="card"
        :draggable="draggable"
        @dragstart="dragStart"
        @dragover.stop
    >
      <div class="test2">
          <i class="icon-text-width"></i>  Object
      </div>
    </div>
</template>

<script>
export default{
    props:['id','draggable'],
    methods: {
        dragStart: e => {
            const target = e.target;
            
            e.dataTransfer.setData('card_id', target.id)

            setTimeout(() => {
                target.style.display = "none";
            },0)
        }
    },
    data(){
        return{
            test:''
        }
    }
}
</script>

<style >
.test2{
    display: flex;
    justify-content: space-around;
    align-items: center;
}
</style>

the App.Vue

代码语言:javascript
复制
<template>
  <div id="app">
      <main class="flexbox">
          
        <Board id="board-1">
        
        </Board>
        <SideBoard id="board-2" class="test">
            <Card id="card-1" draggable='true'>
                <p>Object Card</p>
            </card>
        </SideBoard>


      </main>
  </div>
</template>

<script>
import Board from './components/Board.vue'
import Card from './components/Card.vue'
import SideBoard from './components/sideBoard.vue'


export default {
  name: 'App',
  data(){
      return{
         
      }
  },
  components: {
      Board,
      Card,
      SideBoard,

  }
}
</script>
EN

回答 1

Stack Overflow用户

发布于 2021-08-01 15:03:48

在您的CodeSandbox中,当您在侧边栏或电路板中放置一张卡时,您会触发函数drop。在该函数中,您可以访问被拖动的卡。如果我在你的位置,我会把那张卡的html元素发送到app.vue,然后把它放在电路板上。然后放置(在目标中附加卡)我将删除该部分。所以卡片总是并且总是出现在侧边栏中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68604278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档