В библиотеке Dragula mirrorContainer является ключевым
параметром, определяющим, где будет размещаться зеркальная копия
перетаскиваемого элемента (mirror element) во время операции
drag-and-drop. По умолчанию зеркало создаётся и вставляется в
document.body, однако mirrorContainer
позволяет управлять этим поведением и помещать копию в любой другой
контейнер.
Основная функция mirrorContainer – контролировать
область DOM, в которой отображается перетаскиваемый элемент. Это
особенно важно при использовании ограниченных по размеру или
позиционированных контейнеров, где вставка зеркала в body
может приводить к проблемам с отображением, перекрытием элементов или
некорректной работой scroll.
Параметр mirrorContainer передаётся в функцию
dragula через объект опций:
const drake = dragula(containers, {
mirrorContainer: document.getElementById('my-mirror-container')
});
Если mirrorContainer не указан, Dragula по умолчанию
использует document.body.
Когда элемент начинает перетаскиваться:
mirror element) перетаскиваемого узла.mirrorContainer.Использование mirrorContainer критично в случаях:
overflow: hidden, где отображение в
body вызовет обрезание элемента.Пример 1: Scrollable контейнер
<div id="scrollable-container" style="overflow:auto; height:200px;">
<div class="item">Элемент 1</div>
<div class="item">Элемент 2</div>
</div>
const container = document.getElementById('scrollable-container');
dragula([container], {
mirrorContainer: container
});
В этом примере зеркало перетаскиваемого элемента остаётся внутри скроллируемого контейнера, что позволяет корректно видеть перемещение элемента без выхода за пределы видимой области.
Пример 2: Абсолютно позиционированный контейнер
<div id="fixed-mirror" style="position: relative; width: 500px; height: 500px;">
<!-- зеркало будет вставлено сюда -->
</div>
<div id="source">
<div class="item">Элемент A</div>
</div>
const fixedMirror = document.getElementById('fixed-mirror');
const source = document.getElementById('source');
dragula([source], {
mirrorContainer: fixedMirror
});
Использование собственного контейнера позволяет точно управлять визуальным расположением зеркала относительно других элементов интерфейса.
.gu-mirror.mirrorContainer имеет CSS-трансформации
(transform: scale(), translate()), координаты
зеркала корректируются относительно контейнера.mirrorContainer для нескольких контейнеров
одновременно, что упрощает контроль отображения зеркала в сложных
интерфейсах.overflow: hidden без
необходимости, чтобы не ограничивать видимость зеркала.position: relative или
position: absolute для контейнера зеркала, если требуется
точное позиционирование.copy: true,
зеркало создаётся независимо от исходного элемента, но всё равно
помещается в mirrorContainer.mirrorContainer, однако задают правила, при
которых создаётся зеркало.vertical или horizontal) не изменяет
поведение зеркала, но может потребовать адаптации стилей в
mirrorContainer.Использование mirrorContainer в Dragula позволяет
строить сложные интерфейсы с точным контролем за визуальным
представлением перетаскиваемого элемента, обеспечивая удобство и
предсказуемость поведения drag-and-drop.