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.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 (this.enabled && (_AN_Read_target('target', this))) { this.startListeners(); } } , 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) { return ; } _this.manager.queueTouchStart(event); if (_this.capture && _AN_Read_target('target', event) === canvas) { event.preventDefault(); } } ; this.onTouchStartWindow = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } if (_AN_Read_target('target', event) !== canvas) { _this.manager.queueTouchStart(event); } } ; this.onTouchMove = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } _this.manager.queueTouchMove(event); if (_this.capture) { event.preventDefault(); } } ; this.onTouchEnd = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } _this.manager.queueTouchEnd(event); if (_this.capture && _AN_Read_target('target', event) === canvas) { event.preventDefault(); } } ; this.onTouchEndWindow = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } if (_AN_Read_target('target', event) !== canvas) { _this.manager.queueTouchEnd(event); } } ; this.onTouchCancel = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } _this.manager.queueTouchCancel(event); if (_this.capture) { event.preventDefault(); } } ; this.onTouchOver = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } _this.manager.setCanvasOver(event); } ; this.onTouchOut = function (event){ if (event.defaultPrevented || !_this.enabled || !_this.manager) { return ; } _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); } 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;