or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

constants-utilities.mdindex.mdinput.mdmanager.mdrecognizers.md
tile.json

input.mddocs/

Input Handling

Platform-specific input classes for handling touch, mouse, and pointer events across different devices and browsers.

Capabilities

Base Input Class

Base class for all input handlers providing core input event processing functionality.

/**
 * Base class for input event handling
 * @param {Manager} manager - Reference to the manager instance
 * @param {Function} callback - Callback function for processed input
 */
class Input {
  constructor(manager, callback);
  
  /** Initialize event listeners (virtual method) */
  init();
  
  /** Clean up event listeners (virtual method) */
  destroy();
  
  /** Handle input events (virtual method) */
  handler();
}

Touch Input

Handles multi-touch input events for touch-enabled devices using native touch events.

/**
 * Handles multi-touch input events
 * Supports multiple simultaneous touch points with full gesture data
 */
class TouchInput extends Input {
  constructor(manager, callback);
}

Usage Examples:

import Hammer from "hammerjs";

// TouchInput is automatically selected on touch devices
const mc = new Hammer(element);

// Force TouchInput specifically
const mc = new Hammer(element, {
  inputClass: Hammer.TouchInput
});

Mouse Input

Handles mouse input events for desktop browsers, simulating touch with mouse interactions.

/**
 * Handles mouse input events
 * Simulates touch interactions using mouse events
 */
class MouseInput extends Input {
  constructor(manager, callback);
}

Usage Examples:

// MouseInput is automatically selected on non-touch devices
const mc = new Hammer(element);

// Force MouseInput specifically
const mc = new Hammer(element, {
  inputClass: Hammer.MouseInput
});

Pointer Event Input

Handles pointer events for modern browsers supporting the Pointer Events specification (IE10+, modern browsers).

/**
 * Handles pointer events (IE10+, modern browsers)
 * Unified handling of touch, mouse, and pen input
 */
class PointerEventInput extends Input {
  constructor(manager, callback);
}

Usage Examples:

// PointerEventInput is automatically selected when supported
const mc = new Hammer(element);

// Force PointerEventInput specifically
const mc = new Hammer(element, {
  inputClass: Hammer.PointerEventInput
});

Touch Mouse Input

Combined touch and mouse input handler with deduplication to prevent double events on hybrid devices.

/**
 * Combined touch and mouse input with deduplication
 * Prevents double events on devices supporting both input types
 */
class TouchMouseInput extends Input {
  constructor(manager, callback);
}

Usage Examples:

// TouchMouseInput is the default for most scenarios
const mc = new Hammer(element);

// Explicitly use TouchMouse for hybrid devices
const mc = new Hammer(element, {
  inputClass: Hammer.TouchMouseInput
});

Single Touch Input

Simplified single touch input handler for basic touch interactions, optimized for single-pointer gestures.

/**
 * Single touch input for simple interactions
 * Optimized for single-pointer gestures only
 */
class SingleTouchInput extends Input {
  constructor(manager, callback);
}

Usage Examples:

// Use SingleTouchInput for simple single-touch apps
const mc = new Hammer(element, {
  inputClass: Hammer.SingleTouchInput
});

// Good for basic tap and simple pan gestures
mc.on('tap pan', function(ev) {
  console.log('Simple gesture:', ev.type);
});

Touch Action Management

Utility class for managing the CSS touch-action property and providing polyfills for older browsers.

/**
 * Manages touch-action CSS property and polyfill
 * @param {Manager} manager - Reference to the manager
 * @param {string} value - Touch action value
 */
class TouchAction {
  constructor(manager, value);
  
  /** Set touch-action value */
  set(value);
  
  /** Update touch-action based on recognizers */
  update();
  
  /** Compute touch-action from recognizer settings */
  compute();
  
  /** Prevent default browser behavior */
  preventDefaults(input);
}

Usage Examples:

// TouchAction is managed automatically by the Manager
const mc = new Hammer(element, {
  touchAction: 'pan-y'  // Allow vertical panning only
});

// Dynamic touch action updates
mc.set({ touchAction: 'pan-x' });  // Switch to horizontal only
mc.set({ touchAction: 'none' });   // Prevent all browser gestures
mc.set({ touchAction: 'auto' });   // Allow all browser gestures

Input Detection and Auto-Selection

Hammer.js automatically detects the best input class based on browser capabilities and device type.

/**
 * Automatic input class selection based on browser support
 * Priority: PointerEventInput > TouchMouseInput > TouchInput > MouseInput
 */

// Input class selection logic (internal)
function createInputInstance(manager) {
  // Returns appropriate Input class based on:
  // - Pointer Events support
  // - Touch Events support  
  // - Mouse Events support
  // - Manager options.inputClass override
}

Usage Examples:

// Automatic selection (recommended)
const mc = new Hammer(element);

// Manual override when needed
const mc = new Hammer(element, {
  inputClass: Hammer.MouseInput  // Force mouse input
});

// Check what input class is being used
console.log(mc.input.constructor.name);

Input Event Data

Input classes process raw DOM events into normalized input data for recognizers.

/**
 * Normalized input data structure
 */
interface InputData {
  /** Input event type (START, MOVE, END, CANCEL) */
  eventType: number;
  
  /** Center point of all pointers */
  center: {x: number, y: number};
  
  /** All active pointers */
  pointers: Array<Pointer>;
  
  /** Pointers that changed in this event */
  changedPointers: Array<Pointer>;
  
  /** Type of pointer input */
  pointerType: string;
  
  /** Original DOM event */
  srcEvent: Event;
  
  /** First event in session */
  isFirst: boolean;
  
  /** Final event in session */
  isFinal: boolean;
  
  /** Event timestamp */
  timeStamp: number;
}

Platform-Specific Considerations

Different input classes handle platform-specific behaviors and quirks.

Touch Input Considerations:

// Touch events provide multi-touch support
// - touchstart, touchmove, touchend, touchcancel
// - Multiple simultaneous pointers
// - Touch-specific properties like force, radiusX/Y

const mc = new Hammer(element, {
  inputClass: Hammer.TouchInput
});

Mouse Input Considerations:

// Mouse events simulate touch behavior
// - mousedown, mousemove, mouseup
// - Single pointer simulation
// - Right-click handling

const mc = new Hammer(element, {
  inputClass: Hammer.MouseInput
});

Pointer Events Considerations:

// Unified pointer events for all input types
// - pointerdown, pointermove, pointerup, pointercancel
// - Supports touch, mouse, pen, and other pointer types
// - Modern browsers only (IE10+)

const mc = new Hammer(element, {
  inputClass: Hammer.PointerEventInput
});

Types

interface Pointer {
  clientX: number;
  clientY: number;
  identifier: number;
  pointerId?: number;
  pointerType?: string;
}

interface InputEventTypes {
  INPUT_START: 1;
  INPUT_MOVE: 2;
  INPUT_END: 4;
  INPUT_CANCEL: 8;
}