Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/umanghome/swipe-listener
Zero-dependency, minimal swipe-gesture listener for the web.
https://github.com/umanghome/swipe-listener
event-listener gestures javascript swipe swipe-gestures touch web
Last synced: 3 months ago
JSON representation
Zero-dependency, minimal swipe-gesture listener for the web.
- Host: GitHub
- URL: https://github.com/umanghome/swipe-listener
- Owner: umanghome
- License: mit
- Created: 2018-02-25T13:58:43.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-09T04:22:07.000Z (over 2 years ago)
- Last Synced: 2024-07-18T14:42:01.559Z (4 months ago)
- Topics: event-listener, gestures, javascript, swipe, swipe-gestures, touch, web
- Language: JavaScript
- Homepage: https://umanghome.github.io/swipe-listener
- Size: 240 KB
- Stars: 97
- Watchers: 3
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Swipe-Listener
[![npm version](https://badge.fury.io/js/swipe-listener.svg)](https://www.npmjs.com/package/swipe-listener)Zero-dependency, minimal swipe-gesture listener for the web.
---
## [Demo](https://umanghome.github.io/swipe-listener)
# What
Swipe-listener is a very minimal library that allows listening for swipe gesture on literally any DOM element. Once invoked with a DOM element, simply listen for `swipe` event and determine the direction with the `directions` object.
# Example Code
```js
var container = document.querySelector('#container');
var listener = SwipeListener(container);
container.addEventListener('swipe', function (e) {
var directions = e.detail.directions;
var x = e.detail.x;
var y = e.detail.y;if (directions.left) {
console.log('Swiped left.');
}if (directions.right) {
console.log('Swiped right.');
}if (directions.top) {
console.log('Swiped top.');
}if (directions.bottom) {
console.log('Swiped bottom.');
}if (directions.top && directions.right) {
console.log('Swiped top-right.');
}if (directions.top && directions.left) {
console.log('Swiped top-left.');
}if (directions.bottom && directions.right) {
console.log('Swiped bottom-right.');
}if (directions.bottom && directions.left) {
console.log('Swiped bottom-left.');
}console.log('Started horizontally at', x[0], 'and ended at', x[1]);
console.log('Started vertically at', y[0], 'and ended at', y[1]);
});
```# Installation
## Browser
```html
var container = document.querySelector('#container');
var listener = SwipeListener(container);
container.addEventListener('swipe', function (e) {
console.log(e.detail);
});```
Swipe-listener is also available from unpkg: [`https://unpkg.com/[email protected]/dist/swipe-listener.min.js`](https://unpkg.com/[email protected]/dist/swipe-listener.min.js)
## Installing using NPM
Install from NPM using `npm i --save swipe-listener`, then
```js
import SwipeListener from 'swipe-listener';
```OR
```js
const SwipeListener = require('swipe-listener');
```# API
### `SwipeListener(element, options)`
- `element` DOM Element on which you want to enable swipe gesture tracking. This is the element on which you will be attacking the `swipe` event listener.
- `options` [Optional] Configuration options (see below)Listen for `swipe` event on the `element` passed. Access details using `event.detail`. For example, `directions` can be accessed using `event.detail.directions`. See [events](#events) for more events.
Data passed to `event.detail`:
- `directions` (Object)
- `top` (Boolean) Signifies a top-swipe.
- `right` (Boolean) Signifies a right-swipe.
- `bottom` (Boolean) Signifies a bottom-swipe.
- `left` (Boolean) Signifies a left-swipe.
- `x` (Array) Array containing two elements: starting and ending x-coords.
- `y` (Array) Array containing two elements: starting and ending y-coords.
- `touch` (Boolean) Whether or not `TouchEvent` was used for this particular event.**Note that multiple directions can be `true` at one. In case of a top-left swipe, `directions.top` and `directions.left` will both be `true`.**
### Options
| Key | Description | Default value |
| --- | --- | --- |
| `minHorizontal` | Minimum number of horizontal pixels travelled for the gesture to be considered as a left or right swipe. | `10` |
| `minVertical` | Minimum number of vertical pixels travelled for the gesture to be considered as a top or bottom swipe. | `10` |
| `deltaHorizontal` | Maximum difference between the rightmost pixel (right-swipe) or the leftmost pixel (left-swipe) travelled to and the pixel at which the gesture is released. | `3` |
| `deltaVertical` | Maximum difference between the bottommost pixel (bottom-swipe) or the topmost pixel (top-swipe) travelled to and the pixel at which the gesture is released. | `5` |
| `preventScroll` | Prevents page scrolling when swiping on the DOM element. Can also be specified as a function with the signature `(event) => boolean` | `false` |
| `lockAxis` | Enforces only one direction to be true instead of multiple. Selects the direction with the most travel. Is not enforced when the travel is equal. Example: for a top-left swipe, only one of `top` and `left` will be `true` instead of both. | `true` |
| `touch` | Whether to listen for swipes with touch events | `true` |
| `mouse` | Whether to listen for swipes with mouse events | `true` |### `.off()`
Turns off the swipe-listener on a given element.
Usage:
```js
var listener = SwipeListener(myElem);
listener.off();
```# Events
### `swipe` - Emitted once a swipe is performed.
Emitted once a swipe is completed.
`event.detail` contains
| key | type | description |
| --- | --- | --- |
| `directions` | Object | Object containing `top`, `left`, `bottom`, `right` keys. The directions in which the swipe is performed are set to `true`. |
| `x` | Array | Array of two items: the starting x-coordinate and the ending x-coordinate. |
| `y` | Array | Array of two items: the starting y-coordinate and the ending y-coordinate. |
| `touch` | Boolean | Whether or not `TouchEvent` was used for this particular event. |### `swiping` - Emitted while a swipe is being performed.
Emitted multiple times during a single swipe.
`event.detail` contains
| key | type | description |
| --- | --- | --- |
| `x` | Array | Array of two items: the starting x-coordinate and the ending x-coordinate. |
| `y` | Array | Array of two items: the starting y-coordinate and the ending y-coordinate. |
| `touch` | Boolean | Whether or not `TouchEvent` was used for this particular event. |### `swiperelease` - Emitted once the swipe is released/completed.
Emitted at the end of the swipe.
`event.detail` contains
| key | type | description |
| --- | --- | --- |
| `x` | Array | Array of two items: the starting x-coordinate and the ending x-coordinate. |
| `y` | Array | Array of two items: the starting y-coordinate and the ending y-coordinate. |
| `touch` | Boolean | Whether or not `TouchEvent` was used for this particular event. |### `swipecancel` - Emitted if the swipe-distance did not meet minimum travel-distance.
Emitted at the end of the swipe.
`event.detail` contains
| key | type | description |
| --- | --- | --- |
| `x` | Array | Array of two items: the starting x-coordinate and the ending x-coordinate. |
| `y` | Array | Array of two items: the starting y-coordinate and the ending y-coordinate. |
| `touch` | Boolean | Whether or not `TouchEvent` was used for this particular event. |# Misc
- When `lockAxis` is `false`, swipes using the mouse might make multiple directions `true` even when the travel in a certain direction may not be much. You can work around this by setting `lockAxis` to `true` when the page is not being accessed from a touch-enabled device. Or, you can use `event.detail.x` and `event.detail.y` to calculate which direction has more travel and consider only that direction. Or, you can increase the values of `minVertical` and `minHorizontal`.
- [`TouchEvent`](https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/TouchEvent) is not supported in IE and Edge. Unless you have polyfilled it into the page and it's available as `TouchEvent`, swipes made using touch will not be detected as touch swipes.---
# License
[MIT License](https://opensource.org/licenses/MIT) © [Umang Galaiya](https://umanggalaiya.in/)