Configurable touch bindings for reactive with Hammer. Use on-swipe
, on-tap
, on-rotate
and many more in your reactive views. Also supports bindings for custom recognizers, like on-doubletap
.
Jump to: Quickstart - Live example - Install - Usage - Test - License
See Hammer browser support and reactive for actual browser support.
var reactive = require('reactive')
, touch = require('reactive-touch')
var tpl = '<div on-swipeleft="swipe">Swipe left</div>'
var view = reactive(tpl, null, {
bindings: touch(),
delegate: {
swipe: function(ev, ctx) {
console.log('you swiped left')
}
}
})
This live example demonstrates:
- Custom recognizers
- Reactive enabling of events
- Per-element and per-view options
npm i reactive-touch
Then bundle for the browser with browserify.
touch([bindings][, options])
bindings
: existing bindings to extendoptions
: per-view options (see below)
Your view can react to any Hammer event by adding attributes in the form of on-[event]="handler name"
. If no handler name is given, it is assumed to be the event name. These are the same:
<div on-pan></div>
<div on-pan="pan"></div>
The handler will receive two arguments, similar to reactive's built-in on-click
:
ev
: event datactx
: reactive instance
Each element with touch bindings gets a set of recognizers. Recognizers can be configured per-view and per-element.
Add attributes in the form of [recognizer]-[option]="value"
. Values will be interpolated if wrapped in brackets, and cast to integers, floats or booleans if necessary. Examples:
<div on-pan pan-direction="horizontal"></div>
<div on-rotateend="rotate" rotate-threshold="{ modelProperty + 10 }"></div>
<div on-swipe swipe-velocity="0.65"></div>
<div on-tap tap-taps="2">double tap</div>
<div on-pinch on-rotate pinch-with="rotate"></div>
<div on-press press-enable="{ someMethod }"></div>
Group options by lowercase recognizer name.
touch(bindings, {
swipe: {
threshold: 100
}
})
Simply add a group to options
with a custom name. Optionally set recognizer
- a lowercase recognizer name to extend. Required if the name doesn't contain a standard name. In the following example, recognizer
could have been left out.
<div on-tap on-doubletap></div>
touch(bindings, {
tap: {
requireFailure: 'doubletap'
},
doubletap: {
recognizer: 'tap',
taps: 2,
with: 'tap'
}
})
Common | Description |
---|---|
enable | If false , no events will be emitted. Defaults to true . |
with | A lowercase recognizer name (e.g. tap or mycustomtap ) to recognize simultaneously. Shortcut for recognizeWith(). |
requireFailure | A lowercase recognizer name that is required to fail before recognizing. Shortcut for requireFailure(). |
setup | A view method name, called after recognizer is created and options are set. For advanced usage. Receives three arguments: el , recognizer and ctx . |
For direction
, use a Hammer.DIRECTION_*
constant or a shorthand like all
, horizontal
, left
, etc. Please follow the links below for a description of the other options.
Recognizer | Options |
---|---|
Swipe | threshold, pointers, direction, velocity |
Pan | pointers, threshold, direction |
Pinch | pointers, threshold |
Rotate | pointers, threshold |
Tap | pointers, taps, interval, time, threshold, posThreshold |
Press | pointers, threshold, time |
Recognizer | Events |
---|---|
Swipe | swipe, swipeleft, swiperight, swipeup, swipedown |
Pan | pan, panstart, panmove, panend, pancancel, panleft, panright, panup, pandown |
Pinch | pinch, pinchstart, pinchmove, pinchend, pinchcancel, pinchin, pinchout |
Rotate | rotate, rotatestart, rotatemove, rotateend, rotatecancel |
Tap | tap |
Press | press |
npm i zuul -g
npm test
Or local:
npm run test-local