# touches **Repository Path**: mirrors_Jam3/touches ## Basic Information - **Project Name**: touches - **Description**: simplified touch/mouse events for flick and swipe - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-23 - **Last Updated**: 2026-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # touches [![stable](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges) [(click for demo)](http://jam3.github.io/touches/) - [(source)](demo.js) Normalizes touch and mouse events to provide a simpler interface. Simplest case: ```js //get mouse/touch events on window require('touches')() .on('start', mouseDown) //-> mousedown / touchstart .on('move', mouseMove) //-> mousemove / touchmove .on('end', mouseEnd) //-> mouseup / touchend ... ``` A common pattern for drag events is to listen for events on a parent element (like the `window`), and use a different element as the `target` for client offset calculation. The second argument to the event listener is a `[x, y]` vector representing the calculated client offset (relative to top left of target element). ```js var touch = require('touches') touch(window, { target: button }) .on('move', function (ev, position) { console.log('relative pos', position[0], position[1]) }) ``` Another common pattern, especially with drag events, is filtering touch input to a single finger. Below; the events will only get fired for the first finger placed on the screen. Subsequent fingers will be ignored until after the first finger has been lifted. ```js touch(window, { target: button, filtered: true }) .on('start', dragStart) .on('move', dragMove) .on('end', dragEnd) ``` ## Usage [![NPM](https://nodei.co/npm/touches.png)](https://www.npmjs.com/package/touches) #### `emitter = require('touches')([element, opt])` Creates a new drag emitter by attaching listeners to `element`, which defaults to `window`. The `opt` options can be: - `target` the element to use when calculating the `position` parameter passed to event listeners. The clientX/clientY of the event will be relative to this target - `filtered` whether the touch events should be filtered to the first placed finger - `type` can be a string, either `"mouse"` or `"touch"` if listening to only one or the other event is desired. If any other value, will listen for both mouse and touch. - `preventSimulated` (default `true`) if true, prevents simulated touch events by running `ev.preventDefault()` on `'touchend'` events If the events are not filtered, the `position` for an event will be the first changed touch associated with the `target`. #### `emitter.disable()` Disables the events associated with this emitter by removing them from the DOM element. Returns the emitter for chaining. #### `emitter.enable()` Enables the events associated with this emitter by adding them to the DOM element. The emitter is enabled by default. Returns the emitter for chaining. #### `emitter.target` The current target for position offset calculation. #### `emitter.on('start', listener)` #### `emitter.on('move', listener)` #### `emitter.on('end', listener)` The mousedown/touchstart, mousemove/touchmove, and mouseup/touchend events, respectively. Listeners are called with two parameters: `(ev, position)` where `ev` is the event and `position` is an `[x, y]` array of the client offset, relative to the target's top left. ## demo To run the demo from source, first `git clone` this repo, then: ```sh cd touches npm install npm start ``` And open `localhost:9966` in your browser. To generate a distribution bundle: ```sh npm run build ``` ## License MIT, see [LICENSE.md](http://github.com/Jam3/touches/blob/master/LICENSE.md) for details.