Библиотека Interact.js предоставляет мощные
инструменты для работы с интерактивными элементами на веб-странице,
включая возможность управления размером элементов. Модуль
RestrictSize отвечает за ограничение
размеров при изменении размера (resize) элемента. Этот
функционал позволяет предотвратить чрезмерное растягивание или сжатие
элементов, обеспечивая контроль над минимальной и максимальной шириной и
высотой.
Для использования RestrictSize необходимо подключить
Interact.js и настроить событие resize:
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictSize({
min: { width: 100, height: 50 },
max: { width: 500, height: 300 }
})
],
inertia: true
})
.on('resizemove', function (event) {
let { width, height } = event.rect;
event.target.style.width = width + 'px';
event.target.style.height = height + 'px';
});
Ключевые моменты:
edges определяет, с каких сторон элемент можно
изменять.modifiers содержит массив ограничений.
restrictSize — один из самых часто используемых
модификаторов.min и max задают диапазон
размеров, в пределах которого будет происходить изменение.restrictSize позволяет указать
минимальную и максимальную ширину и
высоту:
interact.modifiers.restrictSize({
min: { width: 150, height: 100 },
max: { width: 600, height: 400 }
});
min.width и min.height — минимальные
размеры элемента.max.width и max.height — максимальные
размеры.Для сохранения пропорций элемента при изменении размера можно
комбинировать restrictSize с AspectRatio
модификатором:
interact('.resizable')
.resizable({
edges: { right: true, bottom: true },
modifiers: [
interact.modifiers.restrictSize({
min: { width: 100, height: 100 },
max: { width: 400, height: 400 }
}),
interact.modifiers.aspectRatio({ ratio: 1 })
]
});
aspectRatio заставляет ширину и высоту изменяться
синхронно, сохраняя заданное соотношение.Иногда требуется, чтобы элемент не выходил за пределы
родителя. Для этого можно использовать функцию
restrictRect в модификаторе:
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
]
});
restriction: 'parent' ограничивает размер
элементом-родителем.endOnly: true означает, что ограничение применяется
только при завершении изменения размера, а не во время движения.Значения min и max могут быть заданы не
только статически, но и через функции, что позволяет
динамически менять ограничения в зависимости от состояния
приложения:
interact('.resizable')
.resizable({
edges: { right: true, bottom: true },
modifiers: [
interact.modifiers.restrictSize({
min: function (element, interactable, action) {
return { width: element.offsetWidth / 2, height: 50 };
},
max: function (element, interactable, action) {
return { width: 800, height: 600 };
}
})
]
});
resize, drag), что позволяет использовать
любую логику для вычисления ограничений.RestrictSize корректно работает как с
абсолютными размерами (width/height), так и с
CSS transform:
interact('.resizable')
.resizable({
edges: { right: true, bottom: true },
modifiers: [
interact.modifiers.restrictSize({
min: { width: 100, height: 100 },
max: { width: 500, height: 500 }
})
]
})
.on('resizemove', function (event) {
let target = event.target;
target.style.transform = `translate(${event.deltaRect.left}px, ${event.deltaRect.top}px)`;
target.style.width = event.rect.width + 'px';
target.style.height = event.rect.height + 'px';
});
event.rect содержит размеры элемента после применения
модификаторов.event.deltaRect содержит смещения, полезные при работе
с transform.right, элемент можно будет сжимать только с одной стороны,
что может привести к неожиданному поведению.restrictSize, затем
aspectRatio, иначе ограничения могут игнорироваться.min и max.Использование RestrictSize в Interact.js позволяет
точно управлять размерами интерактивных элементов, предотвращая
визуальные и функциональные ошибки, создавая интерфейсы с предсказуемым
поведением. Контроль минимальных и максимальных размеров в сочетании с
другими модификаторами, такими как aspectRatio и
restrictRect, обеспечивает гибкость и точность при
разработке сложных веб-приложений.