@@ -20,7 +20,7 @@ function makeKeyboardEvent(event) {
20
20
* @param {string|number } s - Either a character code or the key character.
21
21
* @returns {number } The character code.
22
22
*/
23
- function toKeyCode ( s ) {
23
+ function toKeyCode ( s ) {
24
24
if ( typeof s === "string" ) {
25
25
return s . toUpperCase ( ) . charCodeAt ( 0 ) ;
26
26
}
@@ -99,6 +99,8 @@ class Keyboard extends EventHandler {
99
99
this . _keyDownHandler = this . _handleKeyDown . bind ( this ) ;
100
100
this . _keyUpHandler = this . _handleKeyUp . bind ( this ) ;
101
101
this . _keyPressHandler = this . _handleKeyPress . bind ( this ) ;
102
+ this . _visibilityChangeHandler = this . _handleVisibilityChange . bind ( this ) ;
103
+ this . _windowBlurHandler = this . _handleWindowBlur . bind ( this ) ;
102
104
103
105
this . _keymap = { } ;
104
106
this . _lastmap = { } ;
@@ -126,6 +128,8 @@ class Keyboard extends EventHandler {
126
128
this . _element . addEventListener ( "keydown" , this . _keyDownHandler , false ) ;
127
129
this . _element . addEventListener ( "keypress" , this . _keyPressHandler , false ) ;
128
130
this . _element . addEventListener ( "keyup" , this . _keyUpHandler , false ) ;
131
+ document . addEventListener ( 'visibilitychange' , this . _visibilityChangeHandler , false ) ;
132
+ window . addEventListener ( 'blur' , this . _windowBlurHandler , false ) ;
129
133
}
130
134
131
135
/**
@@ -138,6 +142,8 @@ class Keyboard extends EventHandler {
138
142
this . _element . removeEventListener ( "keypress" , this . _keyPressHandler ) ;
139
143
this . _element . removeEventListener ( "keyup" , this . _keyUpHandler ) ;
140
144
this . _element = null ;
145
+ document . removeEventListener ( 'visibilitychange' , this . _visibilityChangeHandler , false ) ;
146
+ window . removeEventListener ( 'blur' , this . _windowBlurHandler , false ) ;
141
147
}
142
148
143
149
/**
@@ -148,7 +154,7 @@ class Keyboard extends EventHandler {
148
154
* @param {number } keyCode - The key code.
149
155
* @returns {string } The key identifier.
150
156
*/
151
- toKeyIdentifier ( keyCode ) {
157
+ toKeyIdentifier ( keyCode ) {
152
158
keyCode = toKeyCode ( keyCode ) ;
153
159
var count ;
154
160
var hex ;
@@ -192,7 +198,7 @@ class Keyboard extends EventHandler {
192
198
}
193
199
}
194
200
195
- _handleKeyUp ( event ) {
201
+ _handleKeyUp ( event ) {
196
202
var code = event . keyCode || event . charCode ;
197
203
198
204
// Google Chrome auto-filling of login forms could raise a malformed event
@@ -215,7 +221,7 @@ class Keyboard extends EventHandler {
215
221
}
216
222
}
217
223
218
- _handleKeyPress ( event ) {
224
+ _handleKeyPress ( event ) {
219
225
this . fire ( "keypress" , makeKeyboardEvent ( event ) ) ;
220
226
221
227
if ( this . preventDefault ) {
@@ -226,6 +232,17 @@ class Keyboard extends EventHandler {
226
232
}
227
233
}
228
234
235
+ _handleVisibilityChange ( ) {
236
+ if ( document . visibilityState === 'hidden' ) {
237
+ this . _handleWindowBlur ( ) ;
238
+ }
239
+ }
240
+
241
+ _handleWindowBlur ( ) {
242
+ this . _keymap = { } ;
243
+ this . _lastmap = { } ;
244
+ }
245
+
229
246
/**
230
247
* @private
231
248
* @function
0 commit comments