-
Notifications
You must be signed in to change notification settings - Fork 2
/
video_player_controller.js
77 lines (60 loc) · 1.46 KB
/
video_player_controller.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { Controller } from "stimulus";
export default class extends Controller {
static targets = [
"video",
"toggle",
"progressBar",
"progress",
"progressTarget"
];
connect() {
this.isPaused = true;
this.isMousedown = false;
}
togglePlay(event) {
const method = this.isPaused ? "play" : "pause";
this.video[method]();
this.isPaused = !this.isPaused;
const icon = this.isPaused ? "►" : "❚ ❚";
this.toggleTarget.textContent = icon;
}
skip(event) {
this.video.currentTime += parseFloat(event.target.dataset.skip);
}
rangeUpdate(event) {
this.video[event.target.name] = event.target.value;
}
progressUpdate(event) {
const percent = this.video.currentTime / this.video.duration * 100;
this.progressBarTarget.style.flexBasis = `${percent}%`;
}
scrub(event) {
const scrubTime =
event.offsetX / this.progressTarget.offsetWidth * this.video.duration;
this.video.currentTime = scrubTime;
}
mousemove(event) {
this.isMousedown && this.scrub(event);
}
mousedown() {
this.isMousedown = true;
}
mouseup() {
this.isMouseup = false;
}
set isPaused(bool) {
this.data.set("paused", bool);
}
set isMousedown(bool) {
this.data.set("mousedown", bool);
}
get isMousedown() {
return this.data.get("mousedown") === "true";
}
get isPaused() {
return this.data.get("paused") === "true";
}
get video() {
return this.videoTarget;
}
}