ドキュメント/API

イベント

ドラッグイベントが持つもの(アクティブなドラッグ、ターゲット、ポインター、アイテムの位置)と、onBeforeDrop が返せるもの。

このページを編集

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

モニター(useDnDMonitor)、プロバイダーのイベント、ドロップゾーンのフックは DnDEvent を受け取り、onDragEnd は DnDEndEvent を受け取ります。並べ替え可能なリストとツリーは、独自のドロップイベント(SortableDropEvent、SortableTreeDropEvent)を自身の onBeforeDrop と onDrop に渡します。

Live

デモを読み込み中…

<script setup lang="ts">
import { ref } from 'vue';
import { DnDProvider } from '@vue-dnd-kit/core';
import { describe, type LoggedEvent } from './describe';
import TaskColumn from './TaskColumn.vue';
import EventInspector from './EventInspector.vue';

const todo = ref([
  { id: 'docs', title: 'Write docs' },
  { id: 'bug', title: 'Fix #42' },
]);
const done = ref([{ id: 'ship', title: 'Ship v3' }]);

// Every event of the drag, described when it fires. A new drag starts a new log;
// moves fire every frame, so they share one entry, which keeps the latest.
const events = ref<LoggedEvent[]>([]);
let count = 0;
const record = (name: string, type: string, payload: unknown) => {
  if (name === 'onDragStart') events.value = [];
  const lines = describe(type, payload);
  const move = name === 'onDragMove' && events.value.find((event) => event.name === name);
  if (move) Object.assign(move, { lines, count: move.count + 1 });
  else events.value.push({ id: ++count, name, type, lines, count: 1 });
};
</script>

<template>
  <DnDProvider>
    <div class="demo">
      <div class="columns">
        <TaskColumn id="todo" v-model="todo" :record="record" />
        <TaskColumn id="done" v-model="done" :record="record" />
      </div>
      <EventInspector :events="events" :record="record" />
    </div>
  </DnDProvider>
</template>

<style scoped>
.demo {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: center;
  gap: 16px;
}

.columns {
  display: flex;
  flex-direction: column;
  gap: 10px;
  width: 168px;
}
</style>

DnDEvent

ドラッグイベントが運ぶもの:モニター、プロバイダーのイベント、ドロップターゲットのフックがこれを受け取ります。

Active<T>

現在のドラッグ。

Over | null

ドラッグの下にあるドロップターゲット。何もない上では null。

Coordinates

ビューポート座標でのポインター。モディファイア適用後の値です。

Coordinates

ドラッグ開始位置からのオフセット。モディファイア適用後の値です。

Coordinates | null

over の中で、ドラッグ中のボックスの左上の角がある位置。パディングの端から測り、スクロール量を含みます:絶対配置したアイテムをドロップされた場所に置くための left/top です(ボード上のメモなど)。何もない上では null。オーバーレイのボックスの位置で、overlay: false の場合は要素自体の位置です。

DragMode

ドロップで何が起きるか:'move'、'copy'(リストの pull: 'clone'、または clone できるリストのアイテムの上でコピーのモディファイアキーを押している場合)、'swap'、'insert'。通常のドロップターゲットは、移動の代わりにコピーするためにこれを読み取ります。

DragSource

ドラッグ中のアイテムが並べ替え可能なリストから来た場合に存在します。

ExternalData

ページの外からのドラッグ:それが運ぶもの(active.external)。データはドロップ時に届きます。

DnDEndEvent

onDragEnd(とターゲットの onDrop)が受け取るもの:ドロップのイベントと、その結果。

boolean

ドラッグがすべてのドロップターゲットの外で終わった場合は false。

Key[]

onBeforeDrop が受け入れた id(一部が返されなかった限り、ドラッグ中のすべての id)。

Key[]

ドラッグされたそのほかの id:onBeforeDrop が除外したもので、元の位置に戻ります。すべて受け入れられた場合は空です。

'move' | 'copy' | 'link'

ページの外へのドラッグ(native)がほかの場所でドロップされたとき:その場所がそれをどう扱ったか。'move' はアイテムをこちらの並べ替え可能なリストから取り除き、'copy' と 'link' は残します。

onBeforeDrop の返り値

onBeforeDrop の判断:

  • 'accept'(または true、または何も返さない):ドロップが成立します。
  • 'reject'(または false):ドロップせず、アイテムは元の位置に戻ります。
  • id のリスト:それらのアイテムだけを受け入れ、ほかは元の位置に戻ります。
  • 'continue':ドロップせず、ドラッグが続きます。ポインターでは、アイテムが再びポインターに追従し(ボタンを押していなくても)、次に離したとき、つまりクリックでドロップされます。タッチでは、もう一度アイテムを掴みます。キーボードでは、これまでどおりアイテムを動かします。Escape でキャンセルします。ドロップ時には再び onBeforeDrop に問い合わせます。
type BeforeDropResult = boolean | void | Key[] | 'accept' | 'reject' | 'continue'

ドロップの判断を参照してください。

アクティブなドラッグ

実行中のドラッグ:起点となったアイテムと、運んでいるすべてのアイテム。

Key

ドラッグが始まったアイテムの id。

Key[]

ドラッグ中のすべての id。主となるものが先頭です(マルチドラッグ)。

DragItem<T>[]

ドラッグされているすべてのアイテム。主となるアイテムが先頭です。

unknown

ドラッグの起点となったアイテムの data。

string

ドラッグを始めたアイテムの label(人が呼ぶ名前)。

string[]

ドラッグの起点となったアイテムの、正規化された type。空なら、どのドロップターゲットにも合います。

HTMLElement

ドラッグが始まった要素。DOM から切り離されることがあります(仮想リスト、リスト間の移動)。

Rect

ドラッグ開始時の element のレイアウト上の矩形。

SensorType

ドラッグの動き方:'pointer' は座標に追従し、'keyboard' はアイテム単位で動きます(SensorActivation.type)。

ExternalData

ページの外からのドラッグ(ファイル、リンク、テキスト、またはアプリの別のウィンドウからのアイテム):それが運ぶもの。その items はこのドラッグのために作られます(element は代役です)。

boolean

ブラウザー自身のドラッグ(native、または外部からのドラッグ):ドラッグ中の画像はブラウザーが描き、オーバーレイはありません。

ドラッグされている 1 つのアイテム:ドラッグの起点となったもの、またはマルチドラッグのほかのアイテム。

Key

そのドラッグ可能な要素の id(並べ替え可能なアイテムのキー)。

T

ドラッグが並べ替え可能なリストから来た場合のアイテムオブジェクト。

unknown

その data オプション。

string

その label(人が呼ぶ名前)。

string[]

ドラッグ可能な要素の正規化された type。空の場合は、どのドロップターゲットにも当てはまります。

ターゲット

ドラッグの下にあるドロップターゲット。

Key

ドロップターゲットの id。

unknown

ターゲットの data オプション。

string

ターゲットの label(人が呼ぶ名前)。

HTMLElement

ターゲットの要素。

Rect

element の矩形。ドラッグ中に測定されます。

boolean

ターゲットの accept ルールがドラッグ中のアイテムを受け入れるかどうか。

ソース

ドラッグされているアイテムの出どころ(それが並べ替え可能なリストの場合)。

Key

ドラッグ中のアイテムの出どころである並べ替え可能なリスト。

() => void

ドラッグ中のアイテムをそのリストから取り除きます(ゴミ箱ゾーン)。

ドロップが何をするか:'move'、'copy'(アイテムは残り、そのコピーが入ります)、'swap'(behavior: 'swap':2 つのアイテムが場所を入れ替えます)、または 'insert'(通常のドラッグ可能な要素が、リストの createItem が作ったアイテムとしてリストに入ります)。

type DragMode = 'move' | 'copy' | 'swap' | 'insert'