Библиотека Interact.js предоставляет мощные средства для работы с интерактивными элементами: перетаскивание, изменение размера и жесты. Контроль над тем, когда действие должно быть выполнено или отменено, играет ключевую роль в построении предсказуемого и корректного интерфейса. Механизмы отмены действий позволяют предотвратить нежелательные события, улучшить UX и защитить данные.
interactable.preventDefaultМетод preventDefault применяется для
предотвращения стандартного поведения браузера при определённых
событиях. В контексте Interact.js это особенно актуально при
перетаскивании элементов:
interact('.draggable')
.draggable({
listeners: {
move(event) {
event.preventDefault(); // предотвращает стандартное поведение браузера
}
}
});
Ключевые моменты:
preventDefault нужно вызывать внутри слушателя
события.beforestartInteract.js предоставляет событие
beforestart, позволяющее динамически отменять
действие до его начала. Это особенно полезно, когда необходимо проверить
условия для начала перетаскивания или ресайза:
interact('.draggable')
.draggable({
listeners: {
beforestart(event) {
if (!event.target.classList.contains('allowed')) {
return false; // отменяет перетаскивание
}
}
}
});
Особенности использования:
false в beforestart полностью
предотвращает запуск действия.interactable.checkActionМетод checkAction предоставляет гибкий
способ контролировать, какое действие будет выполнено, исходя из позиции
курсора или модификаторов:
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
listeners: {
start(event) {
const action = event.interaction.prepared.name;
if (action === 'resize' && event.rect.width < 100) {
event.interaction.stop(); // останавливает текущее действие
}
}
}
});
Пояснения:
interaction.prepared.name возвращает текущее действие
(drag, resize и т.д.).stop() полностью прекращает текущее
действие.interactable.ignoreFrom и
interactable.allowFromДля предотвращения запуска действий на определённых элементах или областях существуют параметры:
interact('.draggable')
.draggable({
ignoreFrom: '.no-drag',
allowFrom: '.handle'
});
Особенности:
ignoreFrom — селектор элементов, на которых действие не
будет инициировано.allowFrom — селектор элементов, с которых допустимо
инициировать действие.interaction.stop()Метод interaction.stop() позволяет
остановить уже начатое действие. Это особенно полезно при динамических
проверках во время выполнения перетаскивания или ресайза:
interact('.draggable')
.draggable({
listeners: {
move(event) {
if (event.client.x > 500) {
event.interaction.stop(); // останавливает перетаскивание при достижении границы
}
}
}
});
Ключевые моменты:
beforestart, checkAction) для комплексного
контроля.interact('.draggable')
.draggable({
allowFrom: '.handle',
ignoreFrom: '.no-drag',
listeners: {
beforestart(event) {
if (event.client.x < 50) return false;
},
move(event) {
if (event.client.x > 500) event.interaction.stop();
}
}
});
interact('.resizable')
.resizable({
edges: { left: true, right: true },
listeners: {
start(event) {
if (event.rect.width < 100) event.interaction.stop();
}
}
});
Эти подходы комбинируются, создавая мощную систему контроля действий, позволяя полностью управлять интерактивностью на уровне отдельных элементов или даже отдельных событий.
Хотите, я составлю таблицу всех методов Interact.js, которые используются для отмены и предотвращения действий, с кратким описанием и примерами? Это поможет сделать материал ещё нагляднее.