@@ -340,6 +340,15 @@ export class EnvironmentControls extends EventDispatcher {
340340 this . pointerTracker . domElement = domElement ;
341341 domElement . style . touchAction = 'none' ;
342342
343+ // Ensure the element can receive keyboard focus. If no tabindex attribute is
344+ // present, set it to -1 so the element is programmatically focusable without
345+ // being inserted into the tab order.
346+ if ( ! domElement . hasAttribute ( 'tabindex' ) ) {
347+
348+ domElement . tabIndex = - 1 ;
349+
350+ }
351+
343352 const contextMenuCallback = e => {
344353
345354 // exit early if the controls are disabled
@@ -355,15 +364,6 @@ export class EnvironmentControls extends EventDispatcher {
355364
356365 const pointerdownCallback = e => {
357366
358- // exit early if the controls are disabled
359- if ( ! this . enabled ) {
360-
361- return ;
362-
363- }
364-
365- e . preventDefault ( ) ;
366-
367367 const {
368368 camera,
369369 raycaster,
@@ -378,6 +378,17 @@ export class EnvironmentControls extends EventDispatcher {
378378 _keysDown,
379379 } = this ;
380380
381+
382+ // exit early if the controls are disabled
383+ if ( ! this . enabled ) {
384+
385+ return ;
386+
387+ }
388+
389+ e . preventDefault ( ) ;
390+ domElement . focus ( ) ;
391+
381392 // init the pointer
382393 pointerTracker . addPointer ( e ) ;
383394 this . needsUpdate = true ;
@@ -717,7 +728,7 @@ export class EnvironmentControls extends EventDispatcher {
717728
718729 } ;
719730
720- window . addEventListener ( 'keydown' , keydownCallback ) ;
731+ domElement . addEventListener ( 'keydown' , keydownCallback ) ;
721732 window . addEventListener ( 'keyup' , keyupCallback ) ;
722733 window . addEventListener ( 'blur' , blurCallback ) ;
723734
@@ -731,7 +742,7 @@ export class EnvironmentControls extends EventDispatcher {
731742 document . removeEventListener ( 'pointerup' , pointerupCallback ) ;
732743 document . removeEventListener ( 'pointerleave' , pointerleaveCallback ) ;
733744
734- window . removeEventListener ( 'keydown' , keydownCallback ) ;
745+ domElement . removeEventListener ( 'keydown' , keydownCallback ) ;
735746 window . removeEventListener ( 'keyup' , keyupCallback ) ;
736747 window . removeEventListener ( 'blur' , blurCallback ) ;
737748
0 commit comments