Awesome
rc-gesture
Support gesture for react component, inspired by hammer.js and AlloyFinger.
Screenshots
Features
Install
npm install --save rc-gesture
Usage
import Gesture from 'rc-gesture';
ReactDOM.render(
<Gesture
onTap={(gestureStatus) => { console.log(gestureStatus); }}
>
<div>container</div>
</Gesture>,
container);
API
all callback funtion will have one parammeter: type GestureHandler = (s: IGestureStatus) => void;
- gesture: the rc-gesture state object, which contain all information you may need, see gesture
props:
common props
<table class="table table-bordered table-striped"> <thead> <tr> <th style="width: 100px;">name</th> <th style="width: 50px;">type</th> <th>default</th> <th>description</th> </tr> </thead> <tbody> <tr> <td>direction</td> <td>string</td> <th>`all`</th> <td>control the allowed gesture direction, could be `['all', 'vertical', 'horizontal']`</td> </tr> </table>Tap & Press
<table class="table table-bordered table-striped"> <thead> <tr> <th style="width: 100px;">name</th> <th style="width: 50px;">type</th> <th>default</th> <th>description</th> </tr> </thead> <tbody> <tr> <td>onTap</td> <td>function</td> <th></th> <td>single tap callback</td> </tr> <tr> <td>onPress</td> <td>function</td> <th></th> <td>long tap callback</td> </tr> <tr> <td>onPressOut</td> <td>function</td> <th></th> <td>long tap end callback</td> </tr> </table>Swipe
<table class="table table-bordered table-striped"> <thead> <tr> <th style="width: 100px;">name</th> <th style="width: 50px;">type</th> <th>default</th> <th>description</th> </tr> </thead> <tbody> <tr> <td>onSwipe</td> <td>function</td> <th></th> <td>swipe callback, will triggered at the same time of all of below callback</td> </tr> <tr> <td>onSwipeLeft</td> <td>function</td> <th></th> <td>swipe left callback</td> </tr> <tr> <td>onSwipeRight</td> <td>function</td> <th></th> <td>swipe right callback</td> </tr> <tr> <td>onSwipeTop</td> <td>function</td> <th></th> <td>swipe top callback</td> </tr> <tr> <td>onSwipeBottom</td> <td>function</td> <th></th> <td>swipe bottom callback</td> </tr> </tbody> </table>Pan
<table class="table table-bordered table-striped"> <thead> <tr> <th style="width: 100px;">name</th> <th style="width: 50px;">type</th> <th>default</th> <th>description</th> </tr> </thead> <tbody> <tr> <td>onPan</td> <td>function</td> <th></th> <td>pan callback, will triggered at the same time of all of below callback</td> </tr> <tr> <td>onPanStart</td> <td>function</td> <th></th> <td>drag start callback</td> </tr> <tr> <td>onPanMove</td> <td>function</td> <th></th> <td>drag move callback</td> </tr> <tr> <td>onPanEnd</td> <td>function</td> <th></th> <td>drag end callback</td> </tr> <tr> <td>onPanCancel</td> <td>function</td> <th></th> <td>drag cancel callback</td> </tr> <tr> <td>onPanLeft</td> <td>function</td> <th></th> <td>pan left callback</td> </tr> <tr> <td>onPanRight</td> <td>function</td> <th></th> <td>pan right callback</td> </tr> <tr> <td>onPanTop</td> <td>function</td> <th></th> <td>pan top callback</td> </tr> <tr> <td>onPanBottom</td> <td>function</td> <th></th> <td>pan bottom callback</td> </tr> </tbody> </table>Pinch
pinch gesture is not enabled by default, you must set props.enablePinch = true
at first;
Rotate
pinch gesture is not enabled by default, you must set props.enableRotate = true
at first;
gesture
// http://hammerjs.github.io/api/#event-object
export interface IGestureStauts {
/* start status snapshot */
startTime: number;
startTouches: Finger[];
startMutliFingerStatus?: MultiFingerStatus[];
/* now status snapshot */
time: number;
touches: Finger[];
mutliFingerStatus?: MultiFingerStatus[];
/* delta status from touchstart to now, just for singe finger */
moveStatus?: SingeFingerMoveStatus;
/* whether is a long tap */
press?: boolean;
/* whether is a swipe*/
swipe?: boolean;
direction?: number;
/* whether is in pinch process */
pinch?: boolean;
scale?: number;
/* whether is in rotate process */
rotate?: boolean;
rotation?: number; // Rotation (in deg) that has been done when multi-touch. 0 on a single touch.
};
Development
npm install
npm start
Example
npm start
and then go to http://localhost:8005/examples/
Online examples: http://react-component.github.io/gesture/
Test Case
http://localhost:8005/tests/runner.html?coverage
Coverage
http://localhost:8005/node_modules/rc-server/node_modules/node-jscover/lib/front-end/jscoverage.html?w=http://localhost:8088/tests/runner.html?coverage
License
rc-gesture
is released under the MIT license.