ドキュメント/API

DragPreview とオーバーレイの props

ドラッグ中のアイテムのクローン。複数のアイテムを自分でレイアウトするカスタムオーバーレイ向けです。あわせて、オーバーレイコンポーネントが受け取る props について。

このページを編集

このページは AI によって翻訳されており、不正確な箇所が含まれている可能性があります。 英語の原文を読む

Live

デモを読み込み中…

<script setup lang="ts">
import { ref } from 'vue';
import { DnDProvider } from '@vue-dnd-kit/core';
import MediaList from './MediaList.vue';

const media = (kind: 'photo' | 'video', n: number, hue: number) => ({ id: `${kind[0]}${n}`, kind, hue });
const library = ref([
  media('photo', 1, 200),
  media('photo', 2, 30),
  media('video', 1, 280),
  media('photo', 3, 140),
  media('photo', 4, 340),
  media('video', 2, 90),
  media('photo', 5, 250),
  media('photo', 6, 10),
]);
const album = ref([media('photo', 7, 170)]);
</script>

<template>
  <DnDProvider>
    <div class="demo">
      <MediaList id="library" v-model="library" title="Library" :columns="4" />
      <!-- Takes photos only: over it with a video, `accepted` is false. -->
      <MediaList id="album" v-model="album" title="Album · photos" :columns="3" photos-only />
    </div>
  </DnDProvider>
</template>

<style scoped>
.demo {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: center;
  align-content: flex-start;
  gap: 14px;
  /* Room above the lists for the overlay's caption, and below for the album to grow into:
     the lists never move under the pointer. */
  min-height: 300px;
  padding-top: 24px;
}
</style>

DragPreview

const DragPreview: Component<DragPreviewProps>;

ドラッグされている 1 つのアイテムのデフォルトのクローン(DragPreviewProps を参照)。カスタムのオーバーレイは、複数のアイテムを自分でレイアウトするのにこれを使います。デフォルトのオーバーレイは、これでマルチドラッグを表示します。

StackOverlay.vue
<script setup lang="ts">
import { DragPreview, type DragItem } from '@vue-dnd-kit/core';

defineProps<{ items: DragItem[] }>();
</script>

<template>
  <div class="stack">
    <DragPreview v-for="item in items.slice(0, 3)" :id="item.id" :key="item.id" />
  </div>
</template>

クローンは持ち上げた時点で、掴んだアイテムと、ドロップ順でその隣にあるほかのアイテムについて、プロバイダーの overlayPreviews の数だけ作られます(デフォルトは 5)。それ以外のアイテムでは、DragPreview はデフォルトスロットを描画するか、何も描画しません。ドロップすると、各プレビューはそれぞれのアイテムへ飛んでいきます。ゾーン(フォルダーやゴミ箱)にドロップした場合は、プレビューが 1 つずつ順にそのゾーンへ入ります。オーバーレイのガイドを参照してください。

DragPreview の props:ドラッグ中の 1 つのアイテムのデフォルトのクローンで、複数のアイテムを自分でレイアウトするカスタムオーバーレイ(overlay コンポーネントまたはプロバイダーの #overlay スロット)向けです。例:<DragPreview v-for="item in items" :key="item.id" :id="item.id" />。

クローンは持ち上げた時点で、掴んだアイテムと、ドロップ順でその隣にあるほかのアイテムについて、プロバイダーの overlayPreviews の数だけ作られます(デフォルトは 5。その時点で描画されているもの)。それ以外のアイテムでは、DragPreview はデフォルトスロットを描画するか、何も描画しません。クローンは要素いっぱいに表示されます。その要素のサイズは持ち上げた時点のアイテムのサイズで、インラインで設定されます。変更するには style を使ってください(:style="{ width: '100%', height: '100%' }")。style はそのまま渡されますが、クラスでは上書きできません。

並べ替え可能なリストのマルチドラッグ(multiple: 'group' または 'gaps')では、掴んだもの以外のアイテムのプレビューは、レイアウトがどこに置いていても、ドロップとともにそのアイテムの位置に着地します(キャンセル時は元の場所に戻ります):transform で回転・拡大縮小されたラッパーは途中で打ち消され、サイズは幅と高さとしてアニメーションします。スタイル(角丸、影)はプレビュー自体に付けてください:ラッパーはボックスの中に留まります。クローンのないアイテムは、代わりにフェードインします。(リストではなく)ゾーンにドロップされると、プレビューは 1 つずつ順にそこへ入り、ボックスは最後に入ります。

Key

ドラッグ中のアイテムの id:OverlayProps の items のいずれか。

オーバーレイの props

オーバーレイコンポーネント(ドラッグ可能な要素、並べ替え可能なアイテム、リスト、ツリーの overlay オプション)とプロバイダーの #overlay スロットが受け取るもの。

オーバーレイが表示するもの:プロバイダーの #overlay スロットと、オーバーレイコンポーネント(ドラッグ可能な要素、並べ替え可能なアイテム、リスト、ツリーの overlay オプション)の props。

Active

現在のドラッグ。

DragItem[]

ドラッグ中のすべてのアイテム。主となるものが先頭です:マルチドラッグ全体で 1 つのオーバーレイ。

Over | null

ドラッグの下のドロップターゲット。決まったドロップがアニメーションしている間は、着地先のターゲット(ドロップ時点のもの)。キャンセルされたドラッグが元の位置に戻る間は null。

boolean

over がドラッグ中のアイテムを受け入れるかどうか。何もない上では false。

DnDStatus

'dragging'、そしてオーバーレイが着地する(または元の位置に戻る)間は 'dropping'。

DragMode

今ドロップしたら何が起こるか(DnDEvent.mode を参照):たとえばコピー中はプラス記号を表示できます。

DropDestination | null

今ドロップしたらドラッグ中のアイテムが置かれる、並べ替え可能なリストまたはツリーの中の場所:たとえば、ツリーのドラッグが入るフォルダーに応じてオーバーレイに色を付けます。どのターゲットの外でも枠の場所で、dropOutside: 'placeholder'(デフォルト)はアイテムをそこに残します。ドロップがアイテムをどのリストにも置かない場合は null:通常のドロップターゲットの上、アイテムを拒否するリストの上、dropOutside: 'cancel' または 'remove' でのターゲットの外。決まったドロップがアニメーションしている間は、着地する場所。

オーバーレイコンポーネントの props。defineProps<OverlayProps>() 用です。

コンポーネントはオーバーレイのボックスの中に描画されます。ボックスは着地位置のサイズに追従し(overlayFit: 'slot')、ドロップ時にサイズをアニメーションさせます。そのサイズに追従するには、ルートに width: 100%(と height: 100%)を指定してください。固定サイズにすると、コンポーネント自身のサイズが保たれます。

type OverlayProps = OverlaySlotProps

ドロップしたらドラッグ中のアイテムが置かれる場所:並べ替え可能なリストまたはツリーの中の位置で、ドロップイベントの to が示すものと同じです(オーバーレイの to prop、ライブ)。

Key

リストまたはツリーの id。

number

ドラッグ中のアイテムが占めるインデックス:リストの中、またはツリーでは parentKey の下の兄弟の中でのもの。

Key | null

ツリー:アイテムがその下に入るノード。ルートでは null。

number

ツリー:アイテムが置かれる深さ(ルートは 0)。