forked from phaserjs/phaser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVisibilityHandler.js
More file actions
135 lines (117 loc) · 3.18 KB
/
Copy pathVisibilityHandler.js
File metadata and controls
135 lines (117 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2018 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
/**
* Visibility Handler hidden event.
*
* The document in which the Game is embedded has entered a hidden state.
*
* @event Phaser.Boot.VisibilityHandler#hidden
*/
/**
* Visibility Handler visible event.
*
* The document in which the Game is embedded has entered a visible state.
*
* @event Phaser.Boot.VisibilityHandler#visible
*/
/**
* Visibility Handler blur event.
*
* The window in which the Game is embedded has entered a blurred state.
*
* @event Phaser.Boot.VisibilityHandler#blur
*/
/**
* Visibility Handler focus event.
*
* The window in which the Game is embedded has entered a focused state.
*
* @event Phaser.Boot.VisibilityHandler#focus
*/
/**
* The Visibility Handler is responsible for listening out for document level visibility change events.
* This includes `visibilitychange` if the browser supports it, and blur and focus events. It then uses
* the provided Event Emitter and fires the related events.
*
* @function Phaser.Boot.VisibilityHandler
* @fires Phaser.Boot.VisibilityHandler#hidden
* @fires Phaser.Boot.VisibilityHandler#visible
* @fires Phaser.Boot.VisibilityHandler#blur
* @fires Phaser.Boot.VisibilityHandler#focus
* @since 3.0.0
*
* @param {Phaser.Game} game - The Game instance this Visibility Handler is working on.
*/
var VisibilityHandler = function (game)
{
var hiddenVar;
var eventEmitter = game.events;
if (document.hidden !== undefined)
{
hiddenVar = 'visibilitychange';
}
else
{
var vendors = [ 'webkit', 'moz', 'ms' ];
vendors.forEach(function (prefix)
{
if (document[prefix + 'Hidden'] !== undefined)
{
document.hidden = function ()
{
return document[prefix + 'Hidden'];
};
hiddenVar = prefix + 'visibilitychange';
}
});
}
var onChange = function (event)
{
if (document.hidden || event.type === 'pause')
{
eventEmitter.emit('hidden');
}
else
{
eventEmitter.emit('visible');
}
};
if (hiddenVar)
{
document.addEventListener(hiddenVar, onChange, false);
}
window.onblur = function ()
{
eventEmitter.emit('blur');
};
window.onfocus = function ()
{
eventEmitter.emit('focus');
};
// Automatically give the window focus unless config says otherwise
if (window.focus && game.config.autoFocus)
{
window.focus();
game.canvas.addEventListener('mousedown', function ()
{
window.focus();
}, { passive: true });
}
if (game.canvas)
{
game.canvas.onmouseout = function ()
{
game.isOver = false;
eventEmitter.emit('mouseout');
};
game.canvas.onmouseover = function ()
{
game.isOver = true;
eventEmitter.emit('mouseover');
};
}
};
module.exports = VisibilityHandler;