노마드/유튜브
ch11. video player
hippo0207
2022. 8. 30. 17:04
1. play setup
- 기존 base.pug >> main.js 말고 따로 videoPlayer.js 만들어서
비디오페이지에 가면 그 때 그 비디오페이지 자바스크립트를 로드할거임 - >> 웹팩 entry를 추가해야함
module.exports = {
entry: {
main: "./src/client/js/main.js", // 변경할 src code위치
videoPlayer: "./src/client/js/videoPlayer.js",
},
output: {
filename: "js/[name].js", // 결과물 어디다 넣을건지
~~
},

2. play pause
- 기본셋팅
[watch.pug]
extends base.pug
block content
video(src="/"+video.fileUrl, controls)
div
button#play Play
button#mute Mute
span#time 00:00/00:00
input(type="range",step="0.1", min="0", max="1")#volume
block scripts
script(src="/static/js/videoPlayer.js")
======================================
[videoPlayer.js]
const video = document.querySelector("video");
const play = document.getElementById("play");
const mute = document.getElementById("mute");
const time = document.getElementById("time");
const volume = document.getElementById("volume");
const handlePlay = (e) => {
// video playing, pause
// else play the video
};
const handleMute = (e) => {};
play.addEventListener("click", handlePlay);
mute.addEventListener("click", handleMute);

const handlePlayClick = (e) => {
if (video.paused) {
video.play();
} else {
video.pause();
}
playBtn.innerText = video.paused ? "Play" : "Pause";
};
playBtn.addEventListener("click", handlePlayClick);
mute.addEventListener("click", handleMute);
3. mute and unmute
const volumeRange = document.getElementById("volume");
const handleMute = (e) => {
if (video.muted) {
video.muted = false;
} else {
video.muted = true;
}
muteBtn.innerText = video.muted ? "Unmute" : "Mute";
volumeRange.value = video.muted ? 0 : 0.5;
};
muteBtn.addEventListener("click", handleMute);

4. Volume
- range
- 볼륨움직임 감지필요함 >> change말고 input 이벤트가 실시간으로 작동됨
- mute버튼 부분도 수정 << range 0 & 직전값으로 돌리는 기능
let volumeValue = 0.5;
video.volume = volumeValue;
const handleMute = (e) => {
~~
volumeRange.value = video.muted ? 0 : volumeValue;
};
const handleVolumeChange = (event) => {
const {
target: { value },
} = event;
if (video.muted) {
video.muted = false;
muteBtn.innerText = "Mute";
}
volumeValue = value;
video.volumn = value;
};
volumeRange.addEventListener("input", handleVolumeChange);

5. duration and current time
- loaded meta data event
[watch.pug]
div
span#currenTime 00:00
span /
span#totalTime 00:00
[videoPlayer.js]
const currenTime = document.getElementById("currenTime");
const totalTime = document.getElementById("totalTime");
const handleLoadedMetadata = () => {
totalTime.innerText = Math.floor(video.duration);
};
const handleTimeUpdate = () => {
currenTime.innerText = Math.floor(video.currentTime);
};
video.addEventListener("loadedmetadata", handleLoadedMetadata);
video.addEventListener("timeupdate", handleTimeUpdate);

- 시간표현 바꾸기
- new Date(0) >> 1970.01.01 09:00:00부터 시작함 , 밀리세컨드
- new Date(29 * 1000) >> 1970-01-01 09:00:29 << 한국기준이라 +9시간
- new Date(29 * 1000).toISOString() >> 1970-01-01 00:00:29
- new Date(29 * 1000).toISOString().substr(11,8) >> 00:00:29
const formatTime = (seconds) =>
new Date(seconds * 1000).toISOString().substr(14, 5);
const handleLoadedMetadata = () => {
totalTime.innerText = formatTime(Math.floor(video.duration));
};
const handleTimeUpdate = () => {
currenTime.innerText = formatTime(Math.floor(video.currentTime));
};