mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-21 04:53:58 +08:00
77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import {defaults, assign} from '../util';
|
|
import {Hammer, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL} from './hammer';
|
|
|
|
/**
|
|
* A gesture recognizer class.
|
|
*
|
|
* TODO(mlynch): Re-enable the DOM event simulation that was causing issues (or verify hammer does this already, it might);
|
|
*/
|
|
|
|
export class Gesture {
|
|
private _hammer: any;
|
|
private _options: any;
|
|
private _callbacks: any = {};
|
|
|
|
public element: HTMLElement;
|
|
public direction: string;
|
|
public isListening: boolean = false;
|
|
|
|
constructor(element, opts: any = {}) {
|
|
defaults(opts, {
|
|
domEvents: true
|
|
});
|
|
this.element = element;
|
|
|
|
// Map 'x' or 'y' string to hammerjs opts
|
|
this.direction = opts.direction || 'x';
|
|
opts.direction = this.direction === 'x' ?
|
|
DIRECTION_HORIZONTAL :
|
|
DIRECTION_VERTICAL;
|
|
|
|
this._options = opts;
|
|
}
|
|
|
|
options(opts: any) {
|
|
assign(this._options, opts);
|
|
}
|
|
|
|
on(type: string, cb: Function) {
|
|
if (type === 'pinch' || type === 'rotate') {
|
|
this._hammer.get('pinch').set({enable: true});
|
|
}
|
|
this._hammer.on(type, cb);
|
|
(this._callbacks[type] || (this._callbacks[type] = [])).push(cb);
|
|
}
|
|
|
|
off(type: string, cb: Function) {
|
|
this._hammer.off(type, this._callbacks[type] ? cb : null);
|
|
}
|
|
|
|
listen() {
|
|
if (!this.isListening) {
|
|
this._hammer = Hammer(this.element, this._options);
|
|
}
|
|
this.isListening = true;
|
|
}
|
|
|
|
unlisten() {
|
|
var type, i;
|
|
if (this._hammer && this.isListening) {
|
|
for (type in this._callbacks) {
|
|
for (i = 0; i < this._callbacks[type].length; i++) {
|
|
this._hammer.off(type, this._callbacks[type]);
|
|
}
|
|
}
|
|
this._hammer.destroy();
|
|
}
|
|
this._callbacks = {};
|
|
this._hammer = null;
|
|
this.isListening = false;
|
|
}
|
|
|
|
destroy() {
|
|
this.unlisten();
|
|
this.element = this._options = null;
|
|
}
|
|
}
|