В Interact.js взаимодействие с элементами на странице основывается на
событиях drag, resize, gesture и
других, которые предоставляют детальную информацию о позиции курсора или
тач-события. Для корректной обработки этих событий важно понимать
различие между координатами client, page и
screen.
clientX, clientY)Client координаты отражают позицию курсора относительно видимой области окна браузера (viewport), без учета прокрутки страницы.
Особенности:
Пример использования:
interact('.draggable').draggable({
listeners: {
move(event) {
console.log('Client X:', event.client.x, 'Client Y:', event.client.y);
}
}
});
В этом примере event.client.x и
event.client.y дают координаты курсора внутри текущего
окна, что удобно для позиционирования элемента относительно его
контейнера.
pageX, pageY)Page координаты учитывают прокрутку страницы и отражают позицию курсора относительно всей страницы, а не только видимой области.
Особенности:
Пример использования:
interact('.draggable').draggable({
listeners: {
move(event) {
console.log('Page X:', event.page.x, 'Page Y:', event.page.y);
}
}
});
event.page.x и event.page.y позволяют точно
определить позицию даже если страница прокручена, что критично для
элементов с абсолютным позиционированием.
screenX, screenY)Screen координаты отражают положение курсора относительно монитора пользователя, а не окна браузера или документа.
Особенности:
Пример использования:
interact('.draggable').draggable({
listeners: {
move(event) {
console.log('Screen X:', event.screen.x, 'Screen Y:', event.screen.y);
}
}
});
event.screen.x и event.screen.y показывают
абсолютное положение курсора на экране, что редко требуется для
веб-интерфейсов, но важно при построении межоконных взаимодействий.
| Координаты | Относительно | Учитывает прокрутку | Применение |
|---|---|---|---|
| client | Окна браузера (viewport) | Нет | Позиционирование элементов внутри окна |
| page | Всего документа | Да | Drag-and-drop, абсолютное позиционирование |
| screen | Экрана пользователя | Нет | Межоконные взаимодействия, нативные приложения |
Ключевой момент: для большинства задач с элементами
на странице (draggable, resizable)
используются client и page координаты, а screen
координаты применяются редко и только для специфичных сценариев.
Interact.js предоставляет координаты через объект
event:
event.client.x // client X
event.client.y // client Y
event.page.x // page X
event.page.y // page Y
event.screen.x // screen X
event.screen.y // screen Y
Дополнительно есть возможность использовать delta координаты:
event.dx — изменение по X с предыдущего событияevent.dy — изменение по Y с предыдущего событияЭто позволяет легко реализовать плавное движение элементов, независимо от типа координат:
interact('.draggable').draggable({
listeners: {
move(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
}
});
Использование dx/dy позволяет не заботиться о типе
координат, фокусируясь на относительном изменении позиции.
Для тач-устройств координаты работают аналогично, но
Interact.js нормализует события, чтобы
client, page и screen всегда были
доступны:
interact('.draggable').draggable({
listeners: {
move(event) {
console.log('Touch Client:', event.client.x, event.client.y);
console.log('Touch Page:', event.page.x, event.page.y);
}
}
});
Это упрощает разработку универсальных интерфейсов без необходимости писать отдельный код для мыши и тача.
dx/dy для плавного движения элементов,
избегая прямой привязки к абсолютным координатам.Понимание различий между client, page и
screen координатами является ключевым при работе с
Interact.js, особенно при создании сложных интерактивных интерфейсов и
адаптивных drag-and-drop сценариев.