Interact.js предоставляет гибкие инструменты для работы с интерактивными элементами на веб-странице. Одной из ключевых возможностей является настройка активных краев и углов элементов, что позволяет задавать зоны для перетаскивания, масштабирования и взаимодействия с объектами.
В Interact.js терминология следующая:
Активные грани и углы задаются через опцию edges при
подключении resizable или через modifiers
для более сложной логики.
interact('.resize-target')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictEdges({
outer: 'parent'
})
],
inertia: true
});
В этом примере активны все четыре края элемента, и его перемещение ограничено рамками родительского контейнера.
edges принимает объект с четырьмя булевыми свойствами:
top, left, bottom,
right.
true — край активен для взаимодействия.false — край игнорируется.Можно комбинировать активные края для создания частичных зон масштабирования:
edges: { top: false, left: true, bottom: true, right: false }
Такой элемент можно изменять только с левого и нижнего краев.
Для работы с углами используют модификатор square
corners через событие resizemove или кастомную
проверку позиции курсора относительно границ.
interact('.resize-target')
.resizable({
edges: { top: true, left: true, bottom: true, right: true }
})
.on('resizemove', function (event) {
const { x, y, width, height } = event.rect;
event.target.style.width = width + 'px';
event.target.style.height = height + 'px';
event.target.style.transform = `translate(${x}px, ${y}px)`;
});
Углы автоматически формируются на пересечении активных краев. Чтобы
выделить конкретные углы, можно использовать кастомные условия в
обработчике resizemove:
if (event.edges.top && event.edges.left) {
console.log('Активен верхний левый угол');
}
Interact.js позволяет задавать ограничения для краев и углов, используя модификаторы:
Пример ограничения активных краев внутри родительского блока:
modifiers: [
interact.modifiers.restrictEdges({
outer: 'parent',
endOnly: true
})
]
endOnly: true гарантирует, что ограничения применяются
только после окончания действия.
Можно регулировать чувствительность к положению курсора, чтобы края или углы реагировали только при нахождении курсора в пределах определённой зоны:
interact('.resize-target')
.resizable({
edges: { top: true, left: true, bottom: true, right: true },
listeners: {
move(event) {
const margin = 10; // зона чувствительности в пикселях
if (event.clientX - event.target.getBoundingClientRect().left < margin) {
console.log('Левый край активен');
}
}
}
});
Иногда требуется совместить drag и
resize. В этом случае важно правильно настроить
edges и listeners:
interact('.resize-drag-target')
.draggable({ inertia: true })
.resizable({
edges: { top: true, left: true, bottom: true, right: true },
modifiers: [
interact.modifiers.restrictEdges({ outer: 'parent' })
]
});
В такой конфигурации элемент можно перетаскивать всей областью, но изменять размер только с краёв и углов.
delegated
обработчики, чтобы не вешать события на каждый элемент.inertia и restrict для
естественного поведения и контроля границ.Настройка активных краев и углов в Interact.js предоставляет полное управление зонами интерактивности элементов и позволяет создавать сложные интерфейсы с гибкой логикой взаимодействия.