UNPKG

phaser-ce

Version:

Phaser CE (Community Edition) is a fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers.

175 lines (150 loc) 3.98 kB
/** * The mouse wheel input handler. * @class * @constructor * @param {Phaser.Game} game */ Phaser.MouseWheel = function (game) { /** * The currently running game. * @type {Phaser.Game} */ this.game = game; /** * The Input Manager. * @type {Phaser.Input} */ this.input = game.input; /** * The element where event listeners are added (the game canvas). * @type {HTMLElement} */ this.element = game.canvas; /** * Whether the default mouse wheel actions (usually zoom or pan) are cancelled. * @type {boolean} * @default */ this.preventDefault = true; /** * Whether the handler is active. * @type {boolean} * @readOnly * @see Phaser.MouseWheel#start * @see Phaser.MouseWheel#stop */ this.active = false; /** * A callback to call for each wheel event. * It receives an `event` parameter. * @type {function} */ this.callback = null; /** * The context for {@link Phaser.MouseWheel#callback}. * The default is {@link Phaser.MouseWheel#game}. * @type {any} */ this.callbackContext = game; /** * The direction of the last wheel event. * Between -1 (down) and 1 (up). * @type {number} * @readOnly * @default */ this.delta = 0; /** * The name of the wheel event supported by the device, if any. * 'wheel' (standard), 'mousewheel' (deprecated), or 'DOMMouseScroll' (obsolete Firefox). * @type {?string} * @private * @see https://developer.mozilla.org/en-US/docs/Web/Events/wheel * @see https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel * @see https://developer.mozilla.org/en-US/docs/Web/Events/DOMMouseScroll */ this.wheelEventName = game.device.wheelEvent; /** * The wheel event handler, bound to this instance. * @type {function} * @private * @see Phaser.MouseWheel#onWheelHandler */ this.boundOnWheelHandler = this.onWheelHandler.bind(this); /** * Wheel proxy event object, if required. Shared for all wheel events for this mouse. * @type {Phaser.WheelEventProxy} * @private */ this.eventProxy = null; }; /** * @constant * @type {number} */ Phaser.MouseWheel.UP = 1; /** * @constant * @type {number} */ Phaser.MouseWheel.DOWN = -1; /** * Activates the handler, unless unsupported or already activate. * @method Phaser.MouseWheel#start * @returns {boolean} - True if the handler was started, otherwise false. */ Phaser.MouseWheel.prototype.start = function () { if (!this.wheelEventName || this.active) { return false; } this.element.addEventListener(this.wheelEventName, this.boundOnWheelHandler, true); if (this.wheelEventName === 'mousewheel') { this.eventProxy = new Phaser.WheelEventProxy(-1 / 40, 1); } else if (this.wheelEventName === 'DOMMouseScroll') { this.eventProxy = new Phaser.WheelEventProxy(1, 1); } this.active = true; return true; }; /** * Deactivates the handler. * @method Phaser.MouseWheel#stop */ Phaser.MouseWheel.prototype.stop = function () { if (!this.active) { return; } this.element.removeEventListener(this.wheelEventName, this.boundOnWheelHandler, true); this.active = false; }; /** * Processes the wheel event from the browser. * @method Phaser.MouseWheel#onWheelHandler * @private * @param {WheelEvent|MouseWheelEvent|MouseScrollEvent} event */ Phaser.MouseWheel.prototype.onWheelHandler = function (event) { if (this.eventProxy) { event = this.eventProxy.bindEvent(event); } if (this.preventDefault) { event.preventDefault(); } // reverse delta for firefox this.delta = Phaser.Math.clamp(-event.deltaY, -1, 1); if (this.callback) { this.callback.call(this.callbackContext, event); } };