devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
77 lines (60 loc) • 1.71 kB
JavaScript
var eventUtils = require("./utils"),
Emitter = require("./core/emitter"),
registerEmitter = require("./core/emitter_registrator"),
abs = Math.abs;
var HOLD_EVENT_NAME = "dxhold",
HOLD_TIMEOUT = 750,
TOUCH_BOUNDARY = 5;
var HoldEmitter = Emitter.inherit({
start: function start(e) {
this._startEventData = eventUtils.eventData(e);
this._startTimer(e);
},
_startTimer: function _startTimer(e) {
var holdTimeout = "timeout" in this ? this.timeout : HOLD_TIMEOUT;
this._holdTimer = setTimeout(function () {
this._requestAccept(e);
this._fireEvent(HOLD_EVENT_NAME, e, {
target: e.target
});
this._forgetAccept();
}.bind(this), holdTimeout);
},
move: function move(e) {
if (this._touchWasMoved(e)) {
this._cancel(e);
}
},
_touchWasMoved: function _touchWasMoved(e) {
var delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e));
return abs(delta.x) > TOUCH_BOUNDARY || abs(delta.y) > TOUCH_BOUNDARY;
},
end: function end() {
this._stopTimer();
},
_stopTimer: function _stopTimer() {
clearTimeout(this._holdTimer);
},
cancel: function cancel() {
this._stopTimer();
},
dispose: function dispose() {
this._stopTimer();
}
});
/**
* @name ui events.dxhold
* @publicName dxhold
* @type eventType
* @type_function_param1 event:event
* @module events/hold
*/
registerEmitter({
emitter: HoldEmitter,
bubble: true,
events: [HOLD_EVENT_NAME]
});
module.exports = {
name: HOLD_EVENT_NAME
};
;