Platform-specific input classes for handling touch, mouse, and pointer events across different devices and browsers.
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();
}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
});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
});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
});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
});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);
});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 gesturesHammer.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 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;
}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
});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;
}