Visitar URL original
JS30 #11 complete · DeonJordaan/JavaScript30@5d01926 · GitHub
Skip to content

Commit 5d01926

Browse files
committed
JS30 wesbos#11 complete
1 parent f6d4c6a commit 5d01926

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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+
// NOTE My selection methods...could this work?
11+
// const playButton = document.querySelector('.player__button');
12+
// const volumeSlider = document.getElementsByName('.volume');
13+
// const playbackSlider = document.getElementsByName('.playbackRate');
14+
// const skipForward = document.querySelectorAll('.player__button');
15+
16+
// Build our functions
17+
// Option 1
18+
// function togglePlay() {
19+
// if (video.paused) {
20+
// video.play();
21+
// } else {
22+
// video.pause();
23+
// }
24+
// }
25+
// Option 2
26+
function togglePlay() {
27+
const method = video.paused ? 'play' : 'pause';
28+
video[method]();
29+
}
30+
31+
function updateButton() {
32+
const icon = this.paused ? '►' : '❚ ❚';
33+
toggle.textContent = icon;
34+
}
35+
36+
function skip() {
37+
video.currentTime += parseFloat(this.dataset.skip);
38+
}
39+
40+
function handleRangeUpdate() {
41+
video[this.name] = this.value;
42+
}
43+
44+
function handleProgress() {
45+
const percent = (video.currentTime / video.duration) * 100;
46+
progressBar.style.flexBasis = `${percent}%`;
47+
}
48+
49+
function scrub(e) {
50+
const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
51+
video.currentTime = scrubTime;
52+
}
53+
54+
// Hook up event listeners
55+
video.addEventListener('click', togglePlay);
56+
video.addEventListener('play', updateButton);
57+
video.addEventListener('pause', updateButton);
58+
video.addEventListener('timeupdate', handleProgress);
59+
60+
toggle.addEventListener('click', togglePlay);
61+
skipButtons.forEach((button) => button.addEventListener('click', skip));
62+
ranges.forEach((range) => range.addEventListener('change', handleRangeUpdate));
63+
ranges.forEach((range) =>
64+
range.addEventListener('mousemove', handleRangeUpdate)
65+
);
66+
let mousedown = false;
67+
progress.addEventListener('click', scrub);
68+
progress.addEventListener('mousemove', (e) => mousedown && scrub(e));
69+
progress.addEventListener('mousedown', () => (mousedown = true));
70+
progress.addEventListener('mouseup', () => (mousedown = false));

0 commit comments

Comments
 (0)