|
| 1 | +"use strict"; |
1 | 2 | (() => { |
2 | 3 | const player = document.querySelector(".player"), |
3 | 4 | video = player.querySelector(".viewer"), |
|
12 | 13 | handleProgress = () => |
13 | 14 | progressBar.style.flexBasis = `${video.currentTime / video.duration * 100}%`, |
14 | 15 | scrub = e => |
15 | | - video.currentTime = e.offsetX / progress.offsetWidth * video.duration; |
16 | | - |
17 | | - video.addEventListener("click", togglePlay); |
18 | | - video.addEventListener("play", updateButton); |
19 | | - video.addEventListener("pause", updateButton); |
20 | | - video.addEventListener("timeupdate", handleProgress); |
21 | | - |
22 | | - toggle.addEventListener("click", togglePlay); |
| 16 | + video.currentTime = e.offsetX / progress.offsetWidth * video.duration, |
| 17 | + progressMoved = e => mousedown && scrub(e), |
| 18 | + progressUp = e => mousedown = false, |
| 19 | + progressDown = e => mousedown = true, |
| 20 | + bClick = b => video.currentTime += parseFloat(b.dataset.skip), |
| 21 | + updateRange = (range, e) => video[range.name] = range.value; |
23 | 22 |
|
24 | 23 | let mousedown = false; |
25 | | - progress.addEventListener("click", scrub); |
26 | | - progress.addEventListener("mousemove", e => mousedown && scrub(e)); |
27 | | - progress.addEventListener("mousedown", () => mousedown = true); |
28 | | - progress.addEventListener("mouseup", () => mousedown = false); |
29 | 24 |
|
30 | | - skipButtons.forEach(button => { |
31 | | - button.addEventListener( |
32 | | - "click", |
33 | | - () => video.currentTime += parseFloat(button.dataset.skip) |
34 | | - ); |
35 | | - }); |
| 25 | + const events = [ |
| 26 | + { event: "click", handler: togglePlay, target: video }, |
| 27 | + { event: "play", handler: updateButton, target: video }, |
| 28 | + { event: "pause", handler: updateButton, target: video }, |
| 29 | + { event: "timeupdate", handler: handleProgress, target: video }, |
| 30 | + { event: "click", handler: togglePlay, target: toggle }, |
| 31 | + { event: "click", handler: scrub, target: progress }, |
| 32 | + { event: "mousedown", handler: progressDown, target: progress }, |
| 33 | + { event: "mousemove", handler: progressMoved, target: progress }, |
| 34 | + { event: "mouseup", handler: progressUp, target: progress }, |
| 35 | + { event: "click", handler: bClick, target: skipButtons }, |
| 36 | + { event: ["change", "mousemove"], handler: updateRange, target: ranges } |
| 37 | + ]; |
36 | 38 |
|
37 | | - ranges.forEach(range => { |
38 | | - range.addEventListener("change", () => video[range.name] = range.value); |
39 | | - range.addEventListener("mousemove", () => video[range.name] = range.value); |
40 | | - }); |
| 39 | + events.forEach( |
| 40 | + ({ event: e, handler: h, target: t }) => |
| 41 | + (t instanceof NodeList |
| 42 | + ? t.forEach((el, i) => { |
| 43 | + el.addEventListener( |
| 44 | + typeof e === "string" ? e : e[i], |
| 45 | + typeof h === "function" ? h.bind(null, el) : h[i].bind(null, el) |
| 46 | + ); |
| 47 | + }) |
| 48 | + : t.addEventListener(e, h)) |
| 49 | + ); |
41 | 50 | })(); |
0 commit comments