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