Visitar URL original
finished custom video player · wesbos/JavaScript30@0d5bb29 · GitHub
Skip to content

Commit 0d5bb29

Browse files
committed
finished custom video player
1 parent 01386dc commit 0d5bb29

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

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

0 commit comments

Comments
 (0)