Documentation/API
Événements
Ce que transportent les événements de glissement — le glissement actif, la cible, le pointeur, la position de l'item — et ce que répond onBeforeDrop.
Cette page a été traduite par IA et peut contenir des inexactitudes. Lire l'original en anglais
Les moniteurs (useDnDMonitor), les événements du provider et les hooks des droppables reçoivent un
DnDEvent ; onDragEnd reçoit un DnDEndEvent. Les listes et les arbres triables passent leurs
propres événements de dépôt
(SortableDropEvent,
SortableTreeDropEvent) à leurs onBeforeDrop et
onDrop.
Chargement de la démo…
<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
Ce que transportent les événements de glissement : les moniteurs, les événements du provider et les hooks des cibles de dépôt le reçoivent.
Active<T>Le glissement.
Over | nullLa cible de dépôt sous le glissement ; null au-dessus de rien.
CoordinatesPointeur en coordonnées du viewport, après les modificateurs.
CoordinatesDécalage depuis le début du glissement, après les modificateurs.
Coordinates | nullOù se trouve le coin supérieur gauche de la boîte glissée dans over, depuis le bord de son padding et défilement compris : le left/top qui place un item positionné en absolu là où il a été déposé (une note sur un tableau). null au-dessus de rien. Celui de la boîte de l'overlay, ou de l'élément lui-même avec overlay: false.
DragModeCe que ferait un dépôt : 'move', 'copy' (le pull: 'clone' d'une liste, ou la touche de copie maintenue au-dessus d'items dont la liste peut faire clone), 'swap' ou 'insert'. Une simple cible de dépôt le lit pour copier au lieu de déplacer.
DragSourcePrésent quand les items glissés viennent d'une liste triable.
ExternalDataUn glissement venu de l'extérieur de la page : ce qu'il transporte (active.external). Ses données arrivent au dépôt.
DnDEndEvent
Ce que reçoit onDragEnd (et le onDrop de la cible) : l'événement du dépôt, et comment il s'est passé.
booleanFaux quand le glissement s'est terminé hors de toute cible de dépôt.
Key[]Ids acceptés par onBeforeDrop (tous les ids glissés, sauf si un sous-ensemble a été renvoyé).
Key[]Les autres ids glissés : onBeforeDrop les a écartés, et ils reviennent à leur place. Vide quand il les a tous acceptés.
'move' | 'copy' | 'link'Un glissement hors de la page (native) déposé ailleurs : ce que cet endroit en a fait. 'move' retire ici les items de leur liste triable ; 'copy' et 'link' les laissent.
Réponses d'onBeforeDrop
Ce que décide onBeforeDrop :
'accept'(outrue, ou rien) : le dépôt a lieu ;'reject'(oufalse) : pas de dépôt, les items reviennent à leur place ;- une liste d'ids : seuls ces items sont acceptés, les autres reviennent à leur place ;
'continue': pas de dépôt, et le glissement continue. Avec un pointeur, l'item le suit de nouveau (sans bouton maintenu) et le relâchement suivant le dépose, un clic suffit ; au toucher, il est repris ; le clavier le déplace comme avant. Escape l'annule. Le dépôt consulte de nouveauonBeforeDrop.
type BeforeDropResult = boolean | void | Key[] | 'accept' | 'reject' | 'continue'Voir Décider d'un dépôt.
Le glissement actif
Le glissement en cours : l'item depuis lequel il a commencé, et tous les items qu'il transporte.
KeyId de l'item depuis lequel le glissement a commencé.
Key[]Tous les ids glissés, en commençant par l'id principal (multi-drag).
DragItem<T>[]Tous les items glissés, le principal en premier.
unknownLe data de l'item depuis lequel le glissement a commencé.
stringLe label de l'item d'où le glissement est parti, le nom que les gens lui donnent.
string[]Le type normalisé de l'item depuis lequel le glissement a commencé ; vide, il convient à toute cible de dépôt.
HTMLElementÉlément depuis lequel le glissement a commencé. Il peut être détaché du DOM (listes virtuelles, déplacements entre listes).
RectRectangle de mise en page d'element au début du glissement.
SensorTypeComment le glissement se déplace : 'pointer' suit des points, 'keyboard' avance d'item en item (SensorActivation.type).
ExternalDataUn glissement venu de l'extérieur de la page (des fichiers, un lien, du texte, ou des items d'une autre fenêtre de l'application) : ce qu'il transporte. Ses items sont créés pour lui (element est un substitut).
booleanLe glissement propre au navigateur (native, ou un glissement venu de l'extérieur) : le navigateur dessine l'image glissée, et il n'y a pas d'overlay.
Un item glissé : celui depuis lequel le glissement a commencé, ou un autre d'un multi-drag.
KeyId de son élément déplaçable (la clé d'un item triable).
TL'objet item, quand le glissement vient d'une liste triable.
unknownSon option data.
stringSon label, le nom que les gens lui donnent.
string[]type normalisé de l'élément déplaçable ; vide signifie qu'il convient à n'importe quelle cible de dépôt.
La cible
La cible de dépôt sous le glissement.
KeyId de la cible de dépôt.
unknownL'option data de la cible.
stringLe label de la cible, le nom que les gens lui donnent.
HTMLElementL'élément de la cible.
RectLe rectangle d'element, mesuré pendant le glissement.
booleanSi la règle accept de la cible accepte les items glissés.
La source
D'où viennent les items glissés, quand il s'agit d'une liste triable.
Ce que fait un dépôt : 'move', 'copy' (les items restent, des copies sont insérées), 'swap' (behavior: 'swap' : deux items échangent leurs places) ou 'insert' (un simple élément déplaçable entre dans une liste sous la forme de l'item créé par son createItem).
type DragMode = 'move' | 'copy' | 'swap' | 'insert'