spur-events
Version:
Cross-browser & cross-platform event system based on the PointerEvent API.
52 lines (42 loc) • 1.62 kB
JavaScript
var domAPI = require('./dom-api.js');
var dispatchEvent = domAPI.dispatchEvent;
var hasListener = domAPI.hasListener;
var pointerPool = require('./pointer-pool.js');
var getPointerObject = pointerPool.getPointerObject;
var releasePointerObject = pointerPool.releasePointerObject;
var pointerHover = require('./pointer-hover.js');
var handleEnterEvent = pointerHover.handleEnterEvent;
var handleLeaveEvent = pointerHover.handleLeaveEvent;
var core = require('./core.js');
var pointerEventTypes = core.pointerEventTypes;
var window = core.window;
var baseNode = window || {
setTimeout: function () {},
addEventListener: function () {}
};
function handleNativePointer(e) {
if (!hasListener(e.type)) { return; }
var pointerObject = getPointerObject();
pointerObject.event._initFromPointer(e);
dispatchEvent(pointerObject.event);
releasePointerObject(pointerObject);
}
window.setTimeout(function() {
baseNode.addEventListener('pointerdown', handleNativePointer, true);
baseNode.addEventListener('pointermove', handleNativePointer, true);
baseNode.addEventListener('pointerup', handleNativePointer, true);
baseNode.addEventListener('pointercancel', handleNativePointer, true);
baseNode.addEventListener('pointerout', function (e) {
handleNativePointer(e, pointerEventTypes.out);
handleLeaveEvent(e, '_initFromPointer');
}, true);
baseNode.addEventListener('pointerover', function (e) {
handleNativePointer(e, pointerEventTypes.over);
handleEnterEvent(e, '_initFromPointer');
}, true);
}, 0);
module.exports = {
setupBaseNode: function(node) {
baseNode = node;
}
};