Альтернативные способы взаимодействия

Interact.js предоставляет возможность расширенного управления пользовательским взаимодействием с элементами DOM через события drag, resize, gesturable. Помимо стандартных подходов, таких как перетаскивание и изменение размеров, библиотека поддерживает альтернативные способы взаимодействия, которые позволяют создавать более гибкие интерфейсы.

Drag и Drop через программное управление

Помимо автоматической привязки событий к элементам с помощью interact(target).draggable(), можно реализовать перетаскивание программно, контролируя положение элемента через обновление CSS-свойств или атрибутов transform. Это особенно полезно для интеграции с другими библиотеками или нестандартными UI-компонентами.

Пример программного управления:

let posX = 0, posY = 0;

interact('.draggable').draggable({
  listeners: {
    move(event) {
      posX += event.dx;
      posY += event.dy;
      event.target.style.transform = `translate(${posX}px, ${posY}px)`;
    }
  }
});

В этом случае можно внедрять логику ограничений, сетки или адаптивного поведения без привязки к стандартным событиям dragstart, dragmove, dragend.

Использование Snap и Restrict для альтернативных маршрутов

Snap и restrict позволяют задавать альтернативные пути перемещения элементов. Snap фиксирует объект относительно определённых координат, сетки или линий, создавая ощущение «магнита». Restrict ограничивает перемещение рамками контейнера, области экрана или произвольными правилами.

interact('.draggable')
  .draggable({
    modifiers: [
      interact.modifiers.snap({
        targets: [
          interact.snappers.grid({ x: 50, y: 50 })
        ],
        range: 30,
        relativePoints: [{ x: 0, y: 0 }]
      }),
      interact.modifiers.restrictRect({
        restriction: 'parent',
        endOnly: true
      })
    ]
  });

Ключевой момент: комбинирование snap и restrict позволяет создавать альтернативные схемы перемещения, например, движение только по диагонали, фиксированные шаги или ограниченные зоны взаимодействия.

Gesturable: работа с жестами

Interact.js поддерживает события gesturable, которые отслеживают вращение, масштабирование и комбинированные жесты на сенсорных устройствах. В отличие от стандартного drag, gesturable позволяет создавать альтернативные способы взаимодействия, где элемент реагирует на две точки касания или щипки, а не на простое перетаскивание.

interact('.resizable')
  .gesturable({
    listeners: {
      move(event) {
        let scale = (event.scale - 1) * 2 + 1; // увеличение с учётом начального масштаба
        event.target.style.transform =
          `scale(${scale}) rotate(${event.rotation}deg)`;
      }
    }
  });

Использование gesturable позволяет реализовать такие эффекты, как поворот объектов, увеличение изображений и комбинированное перемещение и трансформацию без дублирования кода.

Кастомизация событий и создание виртуальных взаимодействий

Interact.js позволяет подписываться на низкоуровневые события и создавать виртуальные взаимодействия. Например, можно симулировать drag события через таймеры, автоматические анимации или взаимодействие с клавиатурой, что создаёт альтернативные сценарии управления.

Пример виртуального перемещения через событие:

const target = document.querySelector('.draggable');

function simulateDrag(dx, dy) {
  target.dispatchEvent(new CustomEvent('interact-move', {
    detail: { dx, dy }
  }));
}

interact(target)
  .on('interact-move', event => {
    let currentX = parseFloat(target.dataset.x) || 0;
    let currentY = parseFloat(target.dataset.y) || 0;
    currentX += event.detail.dx;
    currentY += event.detail.dy;
    target.style.transform = `translate(${currentX}px, ${currentY}px)`;
    target.dataset.x = currentX;
    target.dataset.y = currentY;
  });

Интеграция с другими методами ввода

Библиотека поддерживает работу с мышью, касаниями и стилусом, а также позволяет создавать собственные адаптеры ввода. Это открывает возможность альтернативного управления объектами через клавиши, сенсорные панели или нестандартные контроллеры.

Пример ограниченного клавиатурного перемещения:

const step = 10;
const el = document.querySelector('.draggable');

document.addEventListener('keydown', e => {
  let x = parseFloat(el.dataset.x) || 0;
  let y = parseFloat(el.dataset.y) || 0;
  if(e.key === 'ArrowUp') y -= step;
  if(e.key === 'ArrowDown') y += step;
  if(e.key === 'ArrowLeft') x -= step;
  if(e.key === 'ArrowRight') x += step;
  el.style.transform = `translate(${x}px, ${y}px)`;
  el.dataset.x = x;
  el.dataset.y = y;
});

Комбинирование drag, resize и gesturable

Создание сложных интерфейсов часто требует сочетания различных способов взаимодействия. Interact.js позволяет комбинировать события:

  • drag + snap + restrict – движение по ограниченной сетке.
  • resize + restrictEdges – изменение размеров с ограничениями по краям.
  • gesturable + drag – масштабирование и перемещение одним жестом.

Такой подход обеспечивает альтернативные сценарии управления, которые адаптируются под устройства и контекст использования.

Модификаторы для альтернативных сценариев

Interact.js предоставляет гибкие модификаторы:

  • restrictEdges – ограничение по границам элемента или контейнера.
  • snap – привязка к сетке, линиям или элементам.
  • restrictSize – ограничения по минимальным и максимальным размерам.
  • restrictRect – ограничение области перемещения.

Эти модификаторы позволяют создавать интерфейсы, где перемещение и масштабирование происходят по альтернативным правилам, повышая UX и контроль над элементами.


Можно глубоко управлять взаимодействиями через события, модификаторы и программное управление, что делает Interact.js мощным инструментом для реализации нестандартных сценариев в веб-интерфейсах.