Библиотека Interact.js предоставляет мощный и гибкий механизм для реализации перетаскивания, изменения размера и жестов на элементах HTML. Для начала работы с перетаскиванием необходимо правильно инициализировать элементы, назначив им соответствующие обработчики событий и настроив параметры взаимодействия.
Для работы с библиотекой необходимо подключить сам Interact.js через CDN или локально:
<script src="https://cdn.jsdelivr.net/npm/@interactjs/interactjs/dist/interact.min.js"></script>
После подключения библиотеке становятся доступны методы
interact(), позволяющие привязывать поведение к любому
DOM-элементу.
Инициализация начинается с указания элемента или группы элементов, которые будут перетаскиваться:
interact('.draggable')
.draggable({
// настройки перетаскивания
});
Здесь .draggable — CSS-класс элементов, которые будут
перемещаться.
draggableОпции позволяют детально контролировать поведение перетаскивания:
inertia – включает инерцию при
отпускании элемента, создавая эффект продолжения движения:inertia: true
autoScroll – автоматически
прокручивает контейнер при перемещении элемента к его границам:autoScroll: true
listeners – набор функций для
обработки событий:listeners: {
start (event) { console.log('Начало перетаскивания', event) },
move (event) { moveElement(event) },
end (event) { console.log('Окончание перетаскивания', event) }
}
Для корректного перемещения элемента используется система координат, где обновление положения происходит через CSS-трансформации:
function moveElement(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
Использование атрибутов data-x и data-y
позволяет хранить текущее смещение и плавно обновлять позицию при каждом
событии move.
Для предотвращения выхода элемента за пределы контейнера применяется
опция modifiers:
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent', // ограничение родительским элементом
endOnly: true
})
]
Это позволяет элементу оставаться внутри родителя, независимо от скорости или направления движения.
Можно ограничить перемещение по одной оси:
draggable({
modifiers: [
interact.modifiers.restrict({
restriction: 'parent',
elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
})
],
axis: 'x' // только горизонтальное перемещение
});
Параметр axis принимает значения 'x',
'y' или undefined для свободного
перемещения.
dragstart – срабатывает при начале
перетаскивания. Здесь обычно включают визуальные эффекты или изменение
стиля элемента.dragmove – основной обработчик
перемещения, где изменяется позиция элемента.dragend – вызывается после завершения
перемещения. Можно использовать для проверки конечной позиции,
сохранения данных или запуска анимации возврата.Interact.js позволяет привязывать обработку к элементам, которые создаются после загрузки страницы. Для этого используется делегирование:
interact(document.body)
.on('dragmove', '.draggable', event => {
moveElement(event);
});
Такой подход гарантирует, что новые элементы с классом
.draggable автоматически будут поддерживать перетаскивание
без дополнительной инициализации.
Для более естественного поведения можно включить инерцию и фиксированные точки привязки (snap):
draggable({
inertia: true,
modifiers: [
interact.modifiers.snap({
targets: [
interact.snappers.grid({ x: 50, y: 50 }) // привязка к сетке 50x50
],
range: Infinity,
relativePoints: [{ x: 0.5, y: 0.5 }]
})
]
});
Эта настройка позволяет элементу “прилипать” к сетке во время перемещения, создавая аккуратный визуальный результат.
Такой подход к инициализации перетаскивания в Interact.js обеспечивает полный контроль над поведением элементов, позволяя комбинировать инерцию, ограничения, привязку к сетке и обработку событий жизненного цикла. Оптимальная структура кода с использованием слушателей и модификаторов делает работу с интерактивными элементами предсказуемой и управляемой.