@@ -10,10 +10,6 @@ const VOLUME_STEP = 0.05;
1010const VOLUME_STEP_FINE = 0.01 ;
1111const FAST_SPEED = 2 ; // This could be a setting?
1212
13- let holding = false ;
14- let spacePressed = false ;
15- let lastSpeed = 1.0 ;
16-
1713// check if active (clicked) element is part of video div, used for keyboard shortcuts (volume etc)
1814function activeElementIsPartOfVideoElement ( ) {
1915 const videoElementParent = document . getElementsByClassName ( 'video-js-parent' ) [ 0 ] ;
@@ -94,32 +90,6 @@ function togglePlay(containerRef, forcePlay = false) {
9490 videoNode . paused || forcePlay ? videoNode . play ( ) : videoNode . pause ( ) ;
9591}
9692
97- function changePlaybackSpeed ( shouldSpeedUp : boolean , playerRef , newRate = - 1 ) {
98- const player = playerRef . current ;
99- if ( ! player ) return ;
100- const isSpeedUp = shouldSpeedUp ;
101- let rate ;
102-
103- if ( newRate !== - 1 ) {
104- rate = newRate ;
105- lastSpeed = player . playbackRate ( ) ;
106- } else {
107- rate = player . playbackRate ( ) ;
108- }
109-
110- let rateIndex = VIDEO_PLAYBACK_RATES . findIndex ( ( x ) => x === rate ) ;
111- if ( rateIndex >= 0 ) {
112- if ( newRate === - 1 ) {
113- rateIndex = isSpeedUp ? Math . min ( rateIndex + 1 , VIDEO_PLAYBACK_RATES . length - 1 ) : Math . max ( rateIndex - 1 , 0 ) ;
114- }
115- const nextRate = VIDEO_PLAYBACK_RATES [ rateIndex ] ;
116-
117- OVERLAY . showPlaybackRateOverlay ( player , nextRate , isSpeedUp ) ;
118- player . userActive ( true ) ;
119- player . playbackRate ( nextRate ) ;
120- }
121- }
122-
12393const VideoJsShorcuts = ( {
12494 playNext,
12595 playPrevious,
@@ -131,6 +101,36 @@ const VideoJsShorcuts = ({
131101 toggleVideoTheaterMode : any , // function
132102 isMobile : boolean ,
133103} ) => {
104+ let holding = false ;
105+ let spacePressed = false ;
106+ let lastSpeed = 1.0 ;
107+
108+ function changePlaybackSpeed ( shouldSpeedUp : boolean , playerRef , newRate = - 1 ) {
109+ const player = playerRef . current ;
110+ if ( ! player ) return ;
111+ const isSpeedUp = shouldSpeedUp ;
112+ let rate ;
113+
114+ if ( newRate !== - 1 ) {
115+ rate = newRate ;
116+ lastSpeed = player . playbackRate ( ) ;
117+ } else {
118+ rate = player . playbackRate ( ) ;
119+ }
120+
121+ let rateIndex = VIDEO_PLAYBACK_RATES . findIndex ( ( x ) => x === rate ) ;
122+ if ( rateIndex >= 0 ) {
123+ if ( newRate === - 1 ) {
124+ rateIndex = isSpeedUp ? Math . min ( rateIndex + 1 , VIDEO_PLAYBACK_RATES . length - 1 ) : Math . max ( rateIndex - 1 , 0 ) ;
125+ }
126+ const nextRate = VIDEO_PLAYBACK_RATES [ rateIndex ] ;
127+
128+ OVERLAY . showPlaybackRateOverlay ( player , nextRate , isSpeedUp ) ;
129+ player . userActive ( true ) ;
130+ player . playbackRate ( nextRate ) ;
131+ }
132+ }
133+
134134 function toggleTheaterMode ( playerRef ) {
135135 const player = playerRef . current ;
136136 if ( ! player ) return ;
@@ -153,7 +153,15 @@ const VideoJsShorcuts = ({
153153 const player = playerRef . current ;
154154 const videoNode = containerRef . current && containerRef . current . querySelector ( 'video, audio' ) ;
155155 if ( ! videoNode || ! player || isUserTyping ( ) ) return ;
156- handleSingleKeyActions ( e , playerRef ) ;
156+
157+ if ( e . keyCode === KEYCODES . SPACEBAR || e . keyCode === KEYCODES . K ) {
158+ e . preventDefault ( ) ;
159+ if ( holding ) {
160+ changePlaybackSpeed ( true , playerRef , lastSpeed ) ;
161+ }
162+ spacePressed = false ;
163+ holding = false ;
164+ }
157165 }
158166
159167 function handleShiftKeyActions ( e : KeyboardEvent , playerRef ) {
@@ -170,24 +178,16 @@ const VideoJsShorcuts = ({
170178
171179 if ( e . keyCode === KEYCODES . SPACEBAR || e . keyCode === KEYCODES . K ) {
172180 e . preventDefault ( ) ;
173- if ( e . type === 'keydown' ) {
174- if ( ! spacePressed ) {
175- togglePlay ( containerRef ) ;
176- } else {
177- if ( ! holding ) {
178- holding = true ;
179- togglePlay ( containerRef , true ) ;
180- changePlaybackSpeed ( true , playerRef , FAST_SPEED ) ;
181- }
182- }
183- spacePressed = true ;
184- } else if ( e . type === 'keyup' ) {
185- if ( holding ) {
186- changePlaybackSpeed ( true , playerRef , lastSpeed ) ;
181+ if ( ! spacePressed ) {
182+ togglePlay ( containerRef ) ;
183+ } else {
184+ if ( ! holding ) {
185+ holding = true ;
186+ togglePlay ( containerRef , true ) ;
187+ changePlaybackSpeed ( true , playerRef , FAST_SPEED ) ;
187188 }
188- spacePressed = false ;
189- holding = false ;
190189 }
190+ spacePressed = true ;
191191 }
192192
193193 if ( e . keyCode === KEYCODES . F ) toggleFullscreen ( playerRef ) ;
0 commit comments