Skip to content

Commit 9c1c5a6

Browse files
committed
Added Custom HMTL5 Video Player (wesbos#11)
1 parent 3759c02 commit 9c1c5a6

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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

Comments
 (0)