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.