@@ -34,19 +34,18 @@ const handlerMap: Map<ID, KeyHandler> = new Map()
3434
3535function startGlobalListener ( ) {
3636 if ( typeof document === 'undefined' ) return
37-
38- if ( ! globalListener ) {
39- globalListener = ( event : KeyboardEvent ) => {
40- for ( const h of handlerMap . values ( ) ) {
41- if ( h . key === event . key ) {
42- if ( h . preventDefault ) event . preventDefault ( )
43- if ( h . stopPropagation ) event . stopPropagation ( )
44- h . handler ( event )
45- }
37+ if ( globalListener ) return
38+
39+ globalListener = ( event : KeyboardEvent ) => {
40+ for ( const h of handlerMap . values ( ) ) {
41+ if ( h . key === event . key ) {
42+ if ( h . preventDefault ) event . preventDefault ( )
43+ if ( h . stopPropagation ) event . stopPropagation ( )
44+ h . handler ( event )
4645 }
4746 }
48- document . addEventListener ( 'keydown' , globalListener )
4947 }
48+ document . addEventListener ( 'keydown' , globalListener )
5049}
5150
5251function stopGlobalListener ( ) {
@@ -74,34 +73,34 @@ export function useKeydown (handlers: KeyHandler[] | KeyHandler, options: UseKey
7473 const isListening = ref ( false )
7574
7675 function startListening ( ) {
77- if ( ! isListening . value ) {
78- const ids = Array . from ( { length : keyHandlers . length } , genId )
76+ if ( isListening . value ) return
7977
80- for ( const [ index , id ] of ids . entries ( ) ) {
81- handlerMap . set ( id , keyHandlers [ index ] ! )
82- }
78+ const ids = Array . from ( { length : keyHandlers . length } , genId )
8379
84- handlerIds . value = ids
80+ for ( const [ index , id ] of ids . entries ( ) ) {
81+ handlerMap . set ( id , keyHandlers [ index ] ! )
82+ }
8583
86- if ( handlerMap . size > 0 ) {
87- startGlobalListener ( )
88- }
84+ handlerIds . value = ids
8985
90- isListening . value = true
86+ if ( handlerMap . size > 0 ) {
87+ startGlobalListener ( )
9188 }
89+
90+ isListening . value = true
9291 }
9392
9493 function stopListening ( ) {
95- if ( isListening . value ) {
96- for ( const id of handlerIds . value ) {
97- handlerMap . delete ( id )
98- }
99- handlerIds . value = [ ]
100- isListening . value = false
94+ if ( ! isListening . value ) return
10195
102- if ( handlerMap . size === 0 ) {
103- stopGlobalListener ( )
104- }
96+ for ( const id of handlerIds . value ) {
97+ handlerMap . delete ( id )
98+ }
99+ handlerIds . value = [ ]
100+ isListening . value = false
101+
102+ if ( handlerMap . size === 0 ) {
103+ stopGlobalListener ( )
105104 }
106105 }
107106
0 commit comments