UNPKG

spur-events

Version:

Cross-browser & cross-platform event system based on the PointerEvent API.

131 lines (111 loc) 4.14 kB
var core = require('./core.js'); var touchType = core.pointerTypes.touch; var pointerEventTypes = core.pointerEventTypes; var window = core.window; var domAPI = require('./dom-api.js'); var dispatchEvent = domAPI.dispatchEvent; var hover = require('./touch-hover.js'); var pointerPool = require('./pointer-pool.js'); var getPointerObject = pointerPool.getPointerObject; var releasePointerObject = pointerPool.releasePointerObject; var primaryTouch = { x: 0, y: 0, timeStamp: 0 }; var primaryId = null; var baseNode = window || { setTimeout: function () {}, addEventListener: function () {} }; window.setTimeout(function() { baseNode.addEventListener('touchstart', function (e) { var firstTouch = e.touches[0]; primaryId = firstTouch.identifier; primaryTouch.x = firstTouch.clientX; primaryTouch.y = firstTouch.clientY; primaryTouch.timeStamp = e.timeStamp; hover.start(e, primaryId); var hasListener = domAPI.hasListener(pointerEventTypes.down); var touches = e.changedTouches; var pointerObject = getPointerObject(); var pointerEvent = pointerObject.event; for (var i = 0; i < touches.length; i += 1) { var touch = touches[i]; if (hasListener) { pointerEvent._initFromTouch(e, touch, pointerEventTypes.down, touch.identifier === primaryId); dispatchEvent(pointerEvent); } } releasePointerObject(pointerObject); }, true); baseNode.addEventListener('touchmove', function (e) { var pointersInfo = hover.move(e); var hasListener = domAPI.hasListener(pointerEventTypes.move); var touches = e.changedTouches; var pointerObject = getPointerObject(); var pointerEvent = pointerObject.event; for (var i = 0; i < touches.length; i += 1) { var touch = touches[i]; if (touch.identifier === primaryId) { primaryTouch.x = touch.clientX; primaryTouch.y = touch.clientY; primaryTouch.timeStamp = e.timeStamp; } if (hasListener) { pointerEvent._initFromTouch(e, touch, pointerEventTypes.move, touch.identifier === primaryId); var pointerInfo = pointersInfo[touch.identifier]; pointerEvent.target = pointerInfo.target; pointerEvent.path = pointerInfo.path; dispatchEvent(pointerEvent); } } releasePointerObject(pointerObject); }, true); baseNode.addEventListener('touchend', function (e) { var firstTouch = e.touches[0]; if (firstTouch) { primaryId = firstTouch.identifier; primaryTouch.x = firstTouch.clientX; primaryTouch.y = firstTouch.clientY; primaryTouch.timeStamp = e.timeStamp; } hover.end(e, primaryId); var hasListener = domAPI.hasListener(pointerEventTypes.up); var touches = e.changedTouches; var pointerObject = getPointerObject(); var pointerEvent = pointerObject.event; for (var i = 0; i < touches.length; i += 1) { var touch = touches[i]; if (hasListener) { pointerEvent._initFromTouch(e, touch, pointerEventTypes.up, touch.identifier === primaryId, true); dispatchEvent(pointerEvent); } } releasePointerObject(pointerObject); }, true); baseNode.addEventListener('touchcancel', function (e) { var firstTouch = e.touches[0]; if (firstTouch) { primaryId = firstTouch.identifier; primaryTouch.x = firstTouch.clientX; primaryTouch.y = firstTouch.clientY; primaryTouch.timeStamp = e.timeStamp; } hover.end(e, primaryId); var hasListener = domAPI.hasListener(pointerEventTypes.cancel); var touches = e.changedTouches; var pointerObject = getPointerObject(); var pointerEvent = pointerObject.event; for (var i = 0; i < touches.length; i += 1) { var touch = touches[i]; if (hasListener) { pointerEvent._initFromTouch(e, touch, pointerEventTypes.cancel, touch.identifier === primaryId, true); dispatchEvent(pointerEvent); } } releasePointerObject(pointerObject); }, true); }, 0); module.exports = { primaryTouch: primaryTouch, setupBaseNode: function(node) { baseNode = node; } };