Документация/API
makeDraggable
Делает элемент перетаскиваемым — свободно или в цели, которые его принимают.
Страница переведена ИИ и может содержать неточности. Читать английский оригинал
function makeDraggable<TData = unknown>( target: MaybeElementRef, options?: DraggableOptions<TData>,): DraggableReturn;Делает элемент перетаскиваемым. По умолчанию — свободное перетаскивание; сортируемые списки построены поверх него.
const el = useTemplateRef<HTMLElement>('el');
const { isDragging } = makeDraggable(el, { id: 'card', type: 'card', data: { title } });
См. drag and drop. Элементы сортируемых списков — тоже
перетаскиваемые элементы: makeSortableItem принимает те же
опции и не только.
Загружаем демо…
<script setup lang="ts">
import { DnDProvider } from '@vue-dnd-kit/core';
import DragCard from './DragCard.vue';
</script>
<template>
<!-- No drop target here: let go, and each card goes back where it was. -->
<DnDProvider>
<div class="cards">
<DragCard title="Grab it anywhere" code="makeDraggable(el)" />
<DragCard title="Grab the handle" code="{ handle: grip }" handle />
<DragCard title="It moves itself" code="{ overlay: false }" self />
<DragCard title="Not now" code="{ disabled: true }" disabled />
</div>
</DnDProvider>
</template>
<style scoped>
.cards {
display: grid;
grid-template-columns: repeat(2, minmax(0, 220px));
gap: 14px;
}
@media (max-width: 480px) {
.cards {
grid-template-columns: minmax(0, 1fr);
}
}
</style>Опции
Опции makeDraggable. Каждая опция, кроме canDrag, принимает значение, ref или геттер (overlay, dropAnimation — значение или ref) и читается, когда она нужна, поэтому изменение вступает в силу не позже следующего драга.
Keyзначение · ref · геттерСтабильный id. В виртуальных списках, где элементы переиспользуются, передавайте геттер. По умолчанию — useId(): он совпадает при рендере на сервере и на клиенте, но свой у каждого экземпляра компонента.
TDataзначение · ref · геттерВсё, что должен нести драг: события и цели читают это как active.data.
stringзначение · ref · геттерНазвание для людей: тексты для скринридеров называют его вместо id (Picked up Tomato). События передают его как active.label и в items.
string | string[]значение · ref · геттерЕго тип или типы, которые сверяются с правилами accept целей. Без типа он подходит к любой цели.
booleanзначение · ref · геттерtrue: его нельзя перетащить (он сообщает aria-disabled).
MaybeElement | stringзначение · ref · геттерЭлемент или селектор внутри перетаскиваемого элемента, который начинает драг (и получает атрибуты).
ActivationOptionsзначение · ref · геттерПереопределяет activation провайдера. Читается в начале нажатия.
(event: PointerEvent | KeyboardEvent) => booleanДополнительное условие, например перетаскивать только при зажатой клавише.
boolean | Componentзначение · reftrue (по умолчанию): за указателем следует оверлей — его рендерит слот #overlay провайдера или клон элемента. Компонент: оверлей рендерит его с OverlayProps, в приоритете перед слотом. false: оверлея нет, сам элемент движется через возвращённый transform. Значение или ref (функция — это функциональный компонент, так что (props) => <Card {...props} /> работает). Есть ли оверлей, решается в начале драга; ref, переключённый посреди драга, сразу меняет компонент (см. overlayTransition провайдера). overOverlay цели важнее, пока драг над ней. В клон не попадают эффекты нажатия UI-китов (ripple) и любые элементы внутри с пометкой data-dnd-no-clone.
DropAnimationзначение · refКак приземляется оверлей, когда заканчивается драг этого элемента, вместо dropAnimation провайдера; overDropAnimation цели важнее. Значение или ref (функция — это анимация), читается при броске.
Modifier[]значение · ref · геттерМодификаторы для драгов, которые начинаются здесь; применяются после modifiers провайдера. Например, [restrictToVerticalAxis] для одного элемента на странице, где остальные перетаскиваются свободно. Читается в начале драга.
'x' | 'y'значение · ref · геттерФиксирует драги, которые начинаются здесь, по одной оси: 'x' — только по горизонтали, 'y' — только по вертикали. Фиксация идёт после modifiers (последним — restrictToHorizontalAxis / restrictToVerticalAxis), поэтому держится, что бы они ни делали. Читается в начале драга.
'pixels' | 'droppables'значение · ref · геттерСтрелки при свободном перетаскивании: сдвиг на пиксели (по умолчанию) или прыжки между целями, которые принимают драг. Читается при каждом нажатии стрелки.
booleanзначение · ref · геттерВыставлять атрибуты role/tabindex/aria-* (по умолчанию true), никогда не перезаписывая ваши собственные. Id инструкций провайдера добавляется к существующему aria-describedby ещё одним токеном (тултип UI-кита на том же элементе сохраняет свой), и удаляется только этот токен. Работает на лету: при выключении убирается то, что выставила библиотека.
boolean | NativeDragOptionsзначение · ref · геттерДраг мышью — это собственный драг браузера, который может покинуть страницу: на рабочий стол, в другое приложение или вкладку, в другое окно приложения. На странице он работает как обычно (цели, списки, которые освобождают место), но вместо оверлея перетаскиваемое изображение рисует браузер. Драги касанием и с клавиатуры остаются драгами библиотеки. true несёт label как текст. Читается в начале нажатия. canDrag спрашивается при нажатии; насколько должна сдвинуться мышь, прежде чем начнётся драг, решает браузер (activation к нему не применяется).
Возвращает
Что возвращает makeDraggable.
ComputedRef<Key>Id перетаскиваемого элемента: опция id или созданный для него id.
ComputedRef<boolean>Его перетаскивают (в том числе как ещё один элемент мульти-драга), или его оверлей ещё приземляется.
ComputedRef<Coordinates | null>Смещение, которое нужно применить при overlay: false: смещение драга за вычетом того, насколько с начала сдвинулось содержимое, в котором находится элемент (прокрутилась страница или контейнер), так что элемент остаётся под указателем.
WritableComputedRef<boolean>Он в выделении провайдера: драг одного выделенного элемента несёт их все. Присвойте значение, чтобы выделить или снять выделение.
За пределы страницы
Что драг native несёт за пределы страницы. См. файлы и другие приложения.
Перетаскиваемый элемент или элемент сортируемого списка, который мышью можно вытащить за пределы страницы (native): на рабочий стол, в другое приложение, в другую вкладку, в другое окно приложения.
(active: Active) => Record<string, string>Что получают другие приложения и страницы: текст по MIME-типу, в виде { 'text/plain': title, 'text/uri-list': url }. Читается в начале драга. Элементы сортируемых списков несут ещё и самих себя — для списков своей группы в другом окне приложения.
'copy' | 'move' | 'link' | 'copyMove' | 'copyLink' | 'linkMove' | 'all'Что драг разрешает сделать месту, куда его бросили (effectAllowed). По умолчанию 'copyMove': перемещение забирает элементы из их списка здесь, копирование оставляет их.