Skip to content

Drag to Zone ​

This example demonstrates how to create an element that can be dragged into a designated drop zone.

Overview ​

The Drag to Zone example shows how to use both useDraggable and useDroppable composables together to create drag and drop interactions. When the draggable element is dropped onto the drop zone, a visual confirmation appears.

Drag me!
Drop here

Key Concepts ​

  • Creating a draggable element with useDraggable
  • Defining a drop zone with useDroppable
  • Handling drop events
  • Providing visual feedback for user interactions

Basic Usage ​

vue
<script setup>
  import { useDraggable, useDroppable } from '@vue-dnd-kit/core';
  import { ref } from 'vue';

  const { elementRef, isDragging, handleDragStart } = useDraggable();

  const dropped = ref(false);

  const { elementRef: droppableRef, isOvered } = useDroppable({
    events: {
      onDrop: () => {
        dropped.value = true;
      },
    },
  });
</script>

<template>
  <div class="flex">
    <div
      v-if="!dropped"
      ref="elementRef"
      :class="{ dragging: isDragging }"
      class="draggable"
      @pointerdown="handleDragStart"
    >
      Drag me!
    </div>

    <div
      ref="droppableRef"
      :class="{ dropped, over: isOvered }"
      class="box"
    >
      {{ dropped ? 'Dropped!' : 'Drop here' }}
    </div>
  </div>
</template>

<style scoped>
  .flex {
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin-bottom: 16px;
  }

  .draggable {
    height: 4rem;
    display: flex;
    justify-content: center;
    align-items: center;
    border-radius: 8px;
    background-color: #000;

    transition: 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
  }

  .box {
    transition: 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
    padding: 16px;
    border-radius: 8px;
    border: 2px solid transparent;
  }

  .dragging {
    opacity: 0;
    height: 0px;
  }

  .dropped {
    background-color: #000;
    color: #fff;
  }
  .over {
    border: 2px solid #000;
    color: #fff;
  }
</style>

Next Steps ​

After mastering how to drag to a drop zone, you can explore:

  • Creating sortable lists
  • Multiple drop zones
  • Conditional drop acceptance
  • Custom drag overlays

Released under the MIT License.