Одной из ключевых возможностей библиотеки Interact.js является реализация механизма перетаскивания элементов. Эта функциональность позволяет пользователю перемещать элементы интерфейса внутри страницы или в пределах определённого контейнера. Библиотека предоставляет гибкий API для настройки поведения перетаскивания, включая ограничения, инерцию, обработку событий и взаимодействие с другими элементами.
Базовый пример подключения перетаскивания:
interact('.draggable').draggable({
listeners: {
move(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)
}
}
})
В данном примере:
.draggable — селектор элементов, к которым применяется
поведениеevent.dx и event.dy — смещение указателя с
момента предыдущего событияdata-x и
data-ytransform, что
обеспечивает высокую производительностьInteract.js предоставляет несколько ключевых событий, связанных с перетаскиванием:
| Событие | Описание |
|---|---|
start |
Срабатывает при начале перетаскивания |
move |
Срабатывает при каждом движении |
end |
Срабатывает после завершения перетаскивания |
Пример обработки всех событий:
interact('.draggable').draggable({
listeners: {
start(event) {
console.log('Начало перетаскивания')
},
move(event) {
console.log('Перемещение')
},
end(event) {
console.log('Перетаскивание завершено')
}
}
})
События передают объект event, содержащий большое
количество полезных данных:
target — DOM-элементdx, dy — изменение координатclientX, clientY — координаты курсораrect — текущие размеры элементаdeltaRect — изменение размеровЭто позволяет реализовывать сложную логику интерфейсов.
Interact.js поддерживает ограничение перемещения элемента определённой областью. Это особенно полезно при создании интерфейсов редакторов, конструкторов или панелей управления.
Пример ограничения внутри родительского контейнера:
interact('.draggable').draggable({
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
]
})
Основные варианты ограничения:
parent — границы родителяself — границы самого элементаdocument — границы документаПример с явным указанием координат:
restriction: {
top: 0,
left: 0,
bottom: 500,
right: 500
}
Такие ограничения часто используются при создании drag-and-drop интерфейсов и панелей инструментов.
Библиотека может имитировать физическую инерцию, благодаря чему элемент продолжает движение после отпускания курсора.
Пример включения инерции:
interact('.draggable').draggable({
inertia: true
})
При активированной инерции учитываются:
Инерция делает взаимодействие более естественным и особенно полезна для сенсорных интерфейсов.
Interact.js позволяет изменять размеры элементов с помощью мыши или сенсорного ввода. Эта возможность применяется при разработке:
Пример базовой настройки изменения размеров:
interact('.resizable').resizable({
edges: { left: true, right: true, bottom: true, top: true },
listeners: {
move(event) {
let { x, y } = event.target.dataset
x = (parseFloat(x) || 0) + event.deltaRect.left
y = (parseFloat(y) || 0) + event.deltaRect.top
Object.assign(event.target.style, {
width: `${event.rect.width}px`,
height: `${event.rect.height}px`,
transform: `translate(${x}px, ${y}px)`
})
Object.assign(event.target.dataset, { x, y })
}
}
})
Основные параметры:
edges — стороны, за которые можно изменять размерrect — текущие размеры элементаdeltaRect — изменение размеровInteract.js автоматически отслеживает движение указателя и пересчитывает размеры.
Часто требуется ограничить диапазон размеров элемента.
interact('.resizable').resizable({
modifiers: [
interact.modifiers.restrictSize({
min: { width: 100, height: 50 },
max: { width: 500, height: 300 }
})
]
})
Это предотвращает:
Interact.js поддерживает полноценную систему drag-and-drop, позволяющую перемещать элементы между различными контейнерами.
Контейнер, принимающий элементы, называется dropzone.
Пример создания зоны приёма:
interact('.dropzone').dropzone({
accept: '.draggable',
overlap: 0.75,
ondrop(event) {
console.log('Элемент перемещён в зону')
}
})
Основные параметры:
| Параметр | Назначение |
|---|---|
accept |
селектор допустимых элементов |
overlap |
процент пересечения |
ondrop |
обработчик события |
Interact.js предоставляет несколько событий взаимодействия:
| Событие | Назначение |
|---|---|
ondragenter |
элемент входит в область |
ondragleave |
элемент покидает область |
ondropactivate |
зона активируется |
ondrop |
элемент сброшен |
Пример использования:
interact('.dropzone').dropzone({
ondragenter(event) {
event.target.classList.add('active')
},
ondragleave(event) {
event.target.classList.remove('active')
},
ondrop(event) {
event.target.appendChild(event.relatedTarget)
}
})
Это позволяет реализовывать интерфейсы:
Interact.js поддерживает работу с мультитач-жестами, что позволяет реализовывать масштабирование и вращение элементов.
Пример обработки жестов:
interact('.gesture').gesturable({
listeners: {
move(event) {
const target = event.target
const scale = (parseFloat(target.getAttribute('data-scale')) || 1) + event.ds
target.style.transform = `scale(${scale})`
target.setAttribute('data-scale', scale)
}
}
})
Основные параметры события:
| Свойство | Назначение |
|---|---|
scale |
коэффициент масштабирования |
angle |
угол поворота |
distance |
расстояние между касаниями |
Такая функциональность широко применяется в:
Interact.js использует систему модификаторов, позволяющую изменять поведение взаимодействий.
Модификаторы применяются для:
Пример привязки к сетке:
interact('.draggable').draggable({
modifiers: [
interact.modifiers.snap({
targets: [
interact.snappers.grid({ x: 50, y: 50 })
],
range: Infinity
})
]
})
Это означает, что элемент будет перемещаться только по сетке с шагом 50 пикселей.
Система модификаторов является одной из самых мощных особенностей Interact.js, так как позволяет гибко комбинировать разные правила взаимодействия.
Interact.js работает с несколькими типами устройств:
| Тип ввода | Поддержка |
|---|---|
| мышь | да |
| сенсорные экраны | да |
| стилусы | да |
| трекпады | да |
Библиотека использует Pointer Events, что обеспечивает единый механизм обработки пользовательского ввода.
Это позволяет создавать интерфейсы, одинаково хорошо работающие на:
Interact.js оптимизирована для работы с частыми событиями пользовательского ввода.
Ключевые факторы производительности:
requestAnimationFrametransform вместо
top/leftБлагодаря этому библиотека подходит для сложных интерфейсов с большим количеством интерактивных элементов.
Interact.js может использоваться совместно с большинством популярных JavaScript-фреймворков:
Интеграция осуществляется через:
Это позволяет применять Interact.js в современных SPA-приложениях.
Interact.js активно используется в разработке сложных интерактивных интерфейсов.
Библиотека широко применяется при создании:
Функциональность перетаскивания и изменения размеров делает возможным создание полноценных визуальных редакторов прямо в браузере.
Drag-and-drop используется для перемещения карточек задач между колонками.
Типичные элементы интерфейса:
Interact.js применяется для работы с графическими объектами:
Такие возможности используются в браузерных редакторах изображений и диаграмм.
Системы визуального построения интерфейсов активно используют:
Это позволяет создавать редакторы интерфейсов, похожие на профессиональные дизайнерские инструменты.
В административных интерфейсах часто используются:
Interact.js позволяет реализовать такие интерфейсы без сложной логики обработки событий.
Благодаря сочетанию следующих возможностей:
Interact.js подходит для создания полноценных интерактивных интерфейсных систем.
Такие системы встречаются в:
Гибкая архитектура библиотеки позволяет строить как простые механизмы drag-and-drop, так и сложные пользовательские интерфейсы с множеством взаимосвязанных элементов.