1+ "use strict" ;
2+
3+ // Get elements
4+ const player = document . querySelector ( '.player' ) ;
5+ const video = player . querySelector ( '.viewer' ) ;
6+ const progress = player . querySelector ( '.progress' ) ;
7+ const progressBar = player . querySelector ( '.progress__filled' ) ;
8+ const toggle = player . querySelector ( '.toggle' ) ;
9+ const skipButtons = player . querySelectorAll ( '[data-skip]' ) ;
10+ const ranges = player . querySelectorAll ( '.player__slider' ) ;
11+
12+ // Build fonctions
13+ function togglePlay ( ) {
14+ const method = video . paused ? 'play' : 'pause' ;
15+ video [ method ] ( ) ;
16+ }
17+
18+ function updateBtn ( ) {
19+ const icon = this . paused ? '►' : '❚ ❚' ;
20+ toggle . textContent = icon ;
21+ }
22+
23+ function skip ( ) {
24+ video . currentTime += parseFloat ( this . dataset . skip ) ;
25+ }
26+
27+ function handleRangeUpdate ( ) {
28+ video [ this . name ] = this . value ;
29+ }
30+
31+ function handleProgress ( ) {
32+ const percent = ( video . currentTime / video . duration ) * 100 ;
33+ progressBar . style . flexBasis = `${ percent } %`
34+ }
35+
36+ function scrub ( e ) {
37+ video . currentTime = ( e . offsetX / progress . offsetWidth ) * video . duration ;
38+ }
39+
40+ // Event listeners
41+ video . addEventListener ( 'click' , togglePlay ) ;
42+ video . addEventListener ( 'play' , updateBtn ) ;
43+ video . addEventListener ( 'pause' , updateBtn ) ;
44+ video . addEventListener ( 'timeUpdate' , handleProgress ) ;
45+
46+ toggle . addEventListener ( 'click' , togglePlay ) ;
47+ skipButtons . forEach ( b => b . addEventListener ( 'click' , skip ) ) ;
48+ ranges . forEach ( r => r . addEventListener ( 'change' , handleRangeUpdate ) ) ;
49+ ranges . forEach ( r => r . addEventListener ( 'mouseMove' , handleRangeUpdate ) ) ;
50+
51+ let mouseDown = false ;
52+ progress . addEventListener ( 'click' , scrub ) ;
53+ progress . addEventListener ( 'mouseMove' , ( e ) => mousedown && scrub ( e ) ) ;
54+ progress . addEventListener ( 'mouseDown' , ( ) => mouseDown = true ) ;
55+ progress . addEventListener ( 'mouseUp' , ( ) => mouseDown = false ) ;
0 commit comments