Mind.js предоставляет инструменты для обработки жестов и мультитач-взаимодействий, которые позволяют создавать динамичные интерфейсы и сложные системы управления жестами на веб-страницах. Библиотека ориентирована на распознавание движений пальцев на сенсорных экранах и работу с мышью на десктопных устройствах, обеспечивая единый API для обоих типов ввода.
Подключение Mind.js к проекту осуществляется через стандартный
<script> или через пакетный менеджер:
import { GestureManager } from 'mind.js';
Инициализация GestureManager:
const manager = new GestureManager({
element: document.getElementById('touch-area'),
enableMultiTouch: true,
gestures: ['tap', 'swipe', 'pinch', 'rotate']
});
element — DOM-элемент, на котором будут отслеживаться
события.enableMultiTouch — включение поддержки нескольких
касаний одновременно.gestures — массив активируемых жестов.Mind.js поддерживает следующие основные жесты: tap, double tap, swipe, pinch, rotate, press.
manager.on('tap', (event) => {
console.log('Tap выполнен на координатах:', event.x, event.y);
});
manager.on('doubletap', (event) => {
console.log('Двойное нажатие зафиксировано');
});
event.x и event.y возвращают координаты
касания относительно элемента.tap и doubletap
настраивается через опцию doubleTapInterval.manager.on('swipe', (event) => {
console.log('Направление свайпа:', event.direction, 'Длина:', event.distance);
});
event.direction принимает значения 'up',
'down', 'left', 'right'.event.distance — пройденное расстояние в пикселях.minDistance — минимальная дистанция
для распознавания свайпа.manager.on('pinch', (event) => {
console.log('Масштаб:', event.scale);
});
event.scale > 1 — увеличение, < 1 —
уменьшение.threshold,
минимальное изменение масштаба для срабатывания события.manager.on('rotate', (event) => {
console.log('Угол поворота:', event.rotation);
});
event.rotation — угол поворота в градусах.pinch, чтобы отслеживать
одновременное масштабирование и вращение.Mind.js позволяет связывать несколько событий с одним элементом и обрабатывать их параллельно:
manager.on('swipe pinch', (event) => {
if(event.type === 'swipe') {
console.log('Свайп:', event.direction);
} else if(event.type === 'pinch') {
console.log('Масштабирование:', event.scale);
}
});
event.type.Для точной работы жестов в Mind.js применяются следующие параметры:
tapMaxDistance — максимальное смещение пальца для
фиксации тап.tapMaxTime — максимальная длительность касания.swipeMinDistance — минимальная дистанция свайпа.pinchThreshold — минимальное изменение масштаба для
распознавания пинча.rotateThreshold — минимальный угол для фиксации
поворота.Пример кастомной настройки:
const manager = new GestureManager({
element: document.getElementById('touch-area'),
enableMultiTouch: true,
gestures: ['tap', 'swipe', 'pinch', 'rotate'],
swipeMinDistance: 50,
pinchThreshold: 0.05,
rotateThreshold: 5
});
Mind.js предоставляет доступ к низкоуровневым событиям касаний:
manager.on('touchstart touchmove touchend', (event) => {
console.log(event.type, 'координаты:', event.touches);
});
event.touches — массив объектов
{ x, y, id } для каждого пальца.Mind.js позволяет определять новые жесты через метод
addGesture:
manager.addGesture('customSwipe', {
type: 'swipe',
direction: 'diagonal',
minDistance: 100
});
manager.on('customSwipe', (event) => {
console.log('Пользовательский диагональный свайп выполнен');
});
type задаёт базовый тип жеста.direction,
minDistance) позволяют уточнять условия срабатывания.requestAnimationFrame при анимациях,
связанных с жестами, чтобы избежать лагов.'ontouchstart' in window) перед инициализацией
мультитач.Mind.js сочетает удобный API для жестов и гибкость для расширения. Возможность работы с несколькими касаниями и создание кастомных событий делает библиотеку подходящей для сложных веб-интерфейсов, где сенсорное взаимодействие играет ключевую роль.