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