var Class = require('../../utils/Class'); var InputEvents = require('../events'); var NOOP = require('../../utils/NOOP'); var TouchManager = new Class({ initialize: function TouchManager(inputManager){ this.manager = inputManager; this.capture = true ; this.enabled = false ; this.target; this.onTouchStart = NOOP; this.onTouchStartWindow = NOOP; this.onTouchMove = NOOP; this.onTouchEnd = NOOP; this.onTouchEndWindow = NOOP; this.onTouchCancel = NOOP; this.onTouchCancelWindow = NOOP; this.onTouchOver = NOOP; this.onTouchOut = NOOP; inputManager.events.once(InputEvents.MANAGER_BOOT, this.boot, this); } , boot: function (){ var config = this.manager.config; this.enabled = config.inputTouch; _AN_Write_target('target', this, false , config.inputTouchEventTarget); this.capture = config.inputTouchCapture; if (!(_AN_Read_target('target', this))) { _AN_Write_target('target', this, false , this.manager.game.canvas); } if (config.disableContextMenu) { this.disableContextMenu(); } if (this.enabled && (_AN_Read_target('target', this))) { this.startListeners(); } } , disableContextMenu: function (){ document.body.addEventListener('contextmenu', function (event){ event.preventDefault(); return false ; } ); return this; } , startListeners: function (){ var _this = this; var canvas = this.manager.canvas; var autoFocus = (window && window.focus && this.manager.game.config.autoFocus); this.onTouchStart = function (event){ if (autoFocus) { window.focus(); } if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.onTouchStart(event); if (_this.capture && event.cancelable && _AN_Read_target('target', event) === canvas) { event.preventDefault(); } } } ; this.onTouchStartWindow = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && _AN_Read_target('target', event) !== canvas) { _this.manager.onTouchStart(event); } } ; this.onTouchMove = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.onTouchMove(event); if (_this.capture && event.cancelable) { event.preventDefault(); } } } ; this.onTouchEnd = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.onTouchEnd(event); if (_this.capture && event.cancelable && _AN_Read_target('target', event) === canvas) { event.preventDefault(); } } } ; this.onTouchEndWindow = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled && _AN_Read_target('target', event) !== canvas) { _this.manager.onTouchEnd(event); } } ; this.onTouchCancel = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.onTouchCancel(event); if (_this.capture) { event.preventDefault(); } } } ; this.onTouchCancelWindow = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.onTouchCancel(event); } } ; this.onTouchOver = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.setCanvasOver(event); } } ; this.onTouchOut = function (event){ if (!event.defaultPrevented && _this.enabled && _this.manager && _this.manager.enabled) { _this.manager.setCanvasOut(event); } } ; var target = _AN_Read_target('target', this); if (!target) { return ; } var passive = { passive: true } ; var nonPassive = { passive: false } ; target.addEventListener('touchstart', this.onTouchStart, (this.capture)? nonPassive: passive); target.addEventListener('touchmove', this.onTouchMove, (this.capture)? nonPassive: passive); target.addEventListener('touchend', this.onTouchEnd, (this.capture)? nonPassive: passive); target.addEventListener('touchcancel', this.onTouchCancel, (this.capture)? nonPassive: passive); target.addEventListener('touchover', this.onTouchOver, (this.capture)? nonPassive: passive); target.addEventListener('touchout', this.onTouchOut, (this.capture)? nonPassive: passive); if (window && this.manager.game.config.inputWindowEvents) { window.addEventListener('touchstart', this.onTouchStartWindow, nonPassive); window.addEventListener('touchend', this.onTouchEndWindow, nonPassive); window.addEventListener('touchcancel', this.onTouchCancelWindow, nonPassive); } this.enabled = true ; } , stopListeners: function (){ var target = _AN_Read_target('target', this); target.removeEventListener('touchstart', this.onTouchStart); target.removeEventListener('touchmove', this.onTouchMove); target.removeEventListener('touchend', this.onTouchEnd); target.removeEventListener('touchcancel', this.onTouchCancel); target.removeEventListener('touchover', this.onTouchOver); target.removeEventListener('touchout', this.onTouchOut); if (window) { window.removeEventListener('touchstart', this.onTouchStartWindow); window.removeEventListener('touchend', this.onTouchEndWindow); } } , destroy: function (){ this.stopListeners(); _AN_Write_target('target', this, false , null ); this.enabled = false ; this.manager = null ; } } ); module.exports = TouchManager;