Библиотека Interact.js предоставляет мощные средства для создания интерактивных элементов, включая перетаскивание, масштабирование и жесты. Одним из ключевых инструментов для управления движением элементов является модуль RestrictEdges, который позволяет ограничивать перемещение объекта границами контейнера или определённой области.
RestrictEdges работает на основе ограничения
краёв (edges) перетаскиваемого объекта. Основная идея
заключается в том, чтобы не позволять элементу выйти за пределы заданной
области. Область может задаваться как в пикселях, так и в процентах
относительно родительского контейнера или документа.
Основные параметры:
Пример базовой конфигурации:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.restrictEdges({
outer: { top: 0, left: 0, bottom: 300, right: 500 }
})
]
});
В этом примере элемент нельзя переместить выше верхней границы
(top: 0), левее левой границы (left: 0) и за
нижнюю или правую границу (bottom: 300,
right: 500).
Параметр outer используется для ограничения внешних краёв объекта. Важно понимать, что outer контролирует положение всего элемента, включая его размеры.
Пример использования:
interact('.box')
.draggable({
modifiers: [
interact.modifiers.restrictEdges({
outer: {
top: 50,
left: 50,
bottom: 400,
right: 600
}
})
]
});
В этом случае объект не может выйти за пределы прямоугольной области
с верхним левым углом (50,50) и нижним правым
(600,400).
Параметр inner позволяет ограничивать внутренние края перетаскиваемого элемента, что особенно удобно для случаев, когда объект должен оставаться полностью внутри контейнера.
Пример:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.restrictEdges({
inner: { top: 0, left: 0, bottom: 300, right: 500 }
})
]
});
Здесь верхняя и левая границы объекта не могут выйти за границы контейнера, а нижний и правый края учитываются исходя из размеров элемента, что предотвращает «выход» объекта наружу.
Можно использовать одновременно inner и outer, чтобы комбинировать ограничения и получать более гибкое поведение:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.restrictEdges({
inner: { top: 0, left: 0 },
outer: { bottom: 500, right: 800 }
})
]
});
Такой подход позволяет создавать интерактивные элементы, которые не «выпадают» из заданной области, при этом оставаясь гибкими в позиционировании.
Interact.js позволяет привязывать ограничения к родительскому контейнеру, что удобно для адаптивных интерфейсов. Вместо точных координат можно использовать функцию, возвращающую размеры родителя:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.restrictEdges({
outer: element => {
const parent = element.parentElement;
return {
top: 0,
left: 0,
bottom: parent.offsetHeight,
right: parent.offsetWidth
};
}
})
]
});
Такой подход позволяет динамически адаптировать границы при изменении размеров контейнера.
RestrictEdges также применяется к элементам, которые
масштабируются с помощью resizable. В этом случае
ограничения будут учитывать новый размер элемента,
предотвращая выход за границы контейнера:
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictEdges({
outer: { top: 0, left: 0, bottom: 400, right: 600 }
})
]
});
Элемент не может быть увеличен за пределы прямоугольной области, задаваемой outer, при этом пользователь может свободно изменять размеры внутри этих границ.
RestrictEdges может быть комбинирован с другими
модификаторами Interact.js, например:
snap — привязка к сетке или направляющим.restrictRect — более сложные ограничения с
прямоугольниками.restrictSize — ограничение размеров при изменении.Последовательность модификаторов влияет на поведение: сначала выполняются более общие ограничения (outer/inner), затем дополнительные модификаторы, такие как snap.
Использование RestrictEdges обеспечивает: