Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 94e2bfd

Browse files
committed
Finished wesbos#11
1 parent 7d9fe67 commit 94e2bfd

File tree

3 files changed

+101
-3
lines changed

3 files changed

+101
-3
lines changed

11 - Custom Video Player/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<input type="range" name="playbackRate" class="player__slider" min="0.5" max="2" step="0.1" value="1">
2020
<button data-skip="-10" class="player__button">« 10s</button>
2121
<button data-skip="25" class="player__button">25s »</button>
22+
<button class="player__button fullscreen" title="Full-screen">&harr;</button>
2223
</div>
2324
</div>
2425

11 - Custom Video Player/scripts.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/**
2+
* scripts.js
3+
*/
4+
5+
// set element vars
6+
const player = document.querySelector('.player');
7+
const video = player.querySelector('.viewer');
8+
9+
const progress = player.querySelector('.progress');
10+
const progressBar = player.querySelector('.progress__filled');
11+
12+
const toggle = player.querySelector('.toggle');
13+
const skipButtons = player.querySelectorAll('[data-skip]');
14+
const ranges = player.querySelectorAll('.player__slider');
15+
const fullscreen = player.querySelector('.fullscreen');
16+
17+
// functions
18+
function togglePlay() {
19+
const method = video.paused ? 'play' : 'pause';
20+
video[method]();
21+
}
22+
23+
function updateButton() {
24+
const icon = this.paused ? '►' : '❚❚';
25+
toggle.textContent = icon;
26+
27+
// console.log('Button is updated!');
28+
}
29+
30+
function skip() {
31+
console.log(this.dataset.skip);
32+
video.currentTime += parseFloat(this.dataset.skip);
33+
}
34+
35+
function handleRangeUpdate() {
36+
video[this.name] = this.value;
37+
}
38+
39+
function handleProgress() {
40+
const percent = ((video.currentTime / video.duration) * 100);
41+
progressBar.style.flexBasis = `${percent}%`;
42+
}
43+
44+
function scrub(e) {
45+
const scrubTime = ((e.offsetX / progress.offsetWidth) * video.duration);
46+
video.currentTime = scrubTime;
47+
}
48+
49+
function makeFullScreen() {
50+
console.log('Fullscreen button was clicked!');
51+
var i = video;
52+
53+
if (i.requestFullscreen) {
54+
i.requestFullscreen();
55+
} else if (i.webkitRequestFullScreen) {
56+
i.webkitRequestFullscreen();
57+
} else if (i.mozRequestFullScreen) {
58+
i.mozRequestFullScreen;
59+
} else {
60+
console.log('Video cannot be made fullscreen!');
61+
}
62+
}
63+
64+
// event listeners
65+
video.addEventListener('click', togglePlay);
66+
video.addEventListener('play', updateButton);
67+
video.addEventListener('pause', updateButton);
68+
video.addEventListener('timeupdate', handleProgress);
69+
70+
toggle.addEventListener('click', togglePlay);
71+
skipButtons.forEach(button => button.addEventListener('click', skip));
72+
73+
ranges.forEach(range => range.addEventListener('change', handleRangeUpdate));
74+
ranges.forEach(range => range.addEventListener('mousemove', handleRangeUpdate));
75+
76+
progress.addEventListener('click', scrub);
77+
78+
let mousedown = false;
79+
// progress.addEventListener('mousemove', (e) => {
80+
// if (mousedown) {
81+
// scrub(e);
82+
// }
83+
// });
84+
progress.addEventListener('mousemove', (e) => mousedown && scrub(e));
85+
progress.addEventListener('mousedown', () => mousedown = true);
86+
progress.addEventListener('mouseup', () => mousedown = false);
87+
88+
fullscreen.addEventListener('click', makeFullScreen);

11 - Custom Video Player/style.css

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,15 @@ body {
9494
height:5px;
9595
transition:height 0.3s;
9696
background:rgba(0,0,0,0.5);
97-
cursor:ew-resize;
97+
/* cursor:ew-resize; */
98+
cursor: pointer;
9899
}
99100

100101
.progress__filled {
101102
width:50%;
102103
background:#ffc600;
103104
flex:0;
104-
flex-basis:50%;
105+
/* flex-basis:50%; */
105106
}
106107

107108
/* unholy css to style input type="range" */
@@ -135,7 +136,7 @@ input[type=range]::-webkit-slider-thumb {
135136
box-shadow:0 0 2px rgba(0,0,0,0.2);
136137
}
137138
input[type=range]:focus::-webkit-slider-runnable-track {
138-
background: #bada55;
139+
background: rgba(255,255,255,0.95);
139140
}
140141
input[type=range]::-moz-range-track {
141142
width: 100%;
@@ -154,3 +155,11 @@ input[type=range]::-moz-range-thumb {
154155
background: #ffc600;
155156
cursor: pointer;
156157
}
158+
159+
/* NEW STYLES */
160+
.player__button:hover {
161+
color: #ffc600;
162+
}
163+
.player__button.fullscreen {
164+
max-width: 35px;
165+
}

0 commit comments

Comments
 (0)