1. Overview

2. Key Events

  1. pointerdown
  2. pointermove
  3. pointerup
  4. pointercancel

3. Pointer Capture

4. Basic Drag Flow

  1. Start
  2. Move
  3. End

5. Example Snippet

const box = document.getElementById('box');
let startX, startY;

box.addEventListener('pointerdown', e => {
  startX = e.clientX - box.offsetLeft;
  startY = e.clientY - box.offsetTop;
  box.setPointerCapture(e.pointerId);
});

box.addEventListener('pointermove', e => {
  if (e.pressure === 0) return; // no contact
  const x = e.clientX - startX;
  const y = e.clientY - startY;
  box.style.transform = `translate(${x}px, ${y}px)`;
});

box.addEventListener('pointerup', e => {
  box.releasePointerCapture(e.pointerId);
  // Optionally: snap to grid, trigger drop event, etc.
});

box.addEventListener('pointercancel', e => {
  box.releasePointerCapture(e.pointerId);
  // Handle cancellation if needed
});

6. Tips