В библиотеке Interact.js ключевым элементом управления интерактивными элементами является возможность контролировать поведение объектов при перетаскивании, масштабировании и вращении. Одним из важнейших инструментов является валидация входных данных, которая позволяет определять, какие действия пользователя допустимы и в каких условиях. Это обеспечивает точность взаимодействия и предотвращает некорректное поведение интерфейса.
interactable.draggable() и функции валидацииДля перетаскиваемых объектов в Interact.js используется метод:
interact(element).draggable({
listeners: { move: dragMoveListener },
modifiers: [],
restrict: {},
inertia: true
});
modifiersModifiers — это набор правил, которые применяются к объекту при его перемещении. Среди них есть важные инструменты для валидации:
restrictRect — ограничение перемещения
объекта в заданной области.restrictEdges — ограничение
срабатывает только на границах контейнера.restrictSize — ограничение
минимального и максимального размера при масштабировании.Пример ограничения перемещения элемента внутри контейнера:
interact('.draggable').draggable({
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
]
});
Здесь restriction: 'parent' гарантирует, что элемент не
выйдет за границы родителя, а endOnly: true применяет
проверку только после завершения перетаскивания, минимизируя нагрузку на
интерфейс.
interactable.on('before-start')Для более сложных условий допуска к взаимодействию используется
событие before-start, которое позволяет отменить или
разрешить действие:
interact('.draggable').on('before-start', function(event) {
if (!event.target.classList.contains('active')) {
return false; // запрещает старт перетаскивания
}
});
false блокирует начало действия.Interact.js предоставляет возможность
корректировать координаты движения через
modifiers с функцией set:
interact('.draggable').draggable({
modifiers: [
interact.modifiers.snap({
targets: [ { x: 100, y: 100 }, { x: 200, y: 200 } ],
range: 20,
relativePoints: [ { x: 0, y: 0 } ]
})
]
});
targets задаёт допустимые точки привязки.range определяет радиус, в пределах которого объект
«притягивается» к цели.relativePoints позволяет привязывать не центр, а любую
точку элемента.Таким образом, библиотека позволяет точно контролировать допустимые координаты объекта, предотвращая ошибки и некорректное позиционирование.
Для элементов, поддерживающих масштабирование
(resizable), валидация размеров реализуется через
restrictSize:
interact('.resizable').resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictSize({
min: { width: 50, height: 50 },
max: { width: 300, height: 300 }
})
],
inertia: true
});
min и max задают диапазон допустимых
размеров.resizemove можно динамически
проверять условия и корректировать размеры в реальном времени.modifiers с функцией setБиблиотека позволяет создавать собственные проверочные функции, используя кастомные модификаторы:
interact('.draggable').draggable({
modifiers: [
{
// кастомная функция ограничения координат
start: function (interaction) {},
set: function (coords, interaction) {
if (coords.x < 0) coords.x = 0;
if (coords.y < 0) coords.y = 0;
return coords;
}
}
]
});
set получает текущие координаты и должна
возвращать новые.dragmove и resizemoveДля сложных сценариев контроля можно проверять координаты и размеры на каждом шаге движения:
interact('.draggable').draggable({
listeners: {
move: function(event) {
let x = event.pageX;
let y = event.pageY;
if (x < 50) x = 50;
if (y < 50) y = 50;
event.target.style.transform = `translate(${x}px, ${y}px)`;
}
}
});
before-start для блокировки
действий до проверки условий.move и
resizemove для динамических проверок, особенно при
сложных интерфейсах с множественными зависимостями.Валидация входных данных в Interact.js сочетает встроенные модификаторы, кастомные функции и обработчики событий, что позволяет полностью контролировать интерактивное поведение элементов на странице. Такой подход обеспечивает стабильность и предсказуемость интерфейса, предотвращая ошибки пользователя и некорректные действия.