\(@^0^@)/
[TDL] 05/01 Today's-Done-List 본문
728x90
- JavaScript youtube-video
- Fullscreen() 메서드 사용
https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
- Document.exitFullscreen() : 전체 화면 모드에서 창 모드로 다시 전환하도록 요청
- Element.requestFullscreen() : 사용자 브라우저에 지정된 요소를 전체 화면 모드로 전환하여 브라우저의 모든 UI 요소와 다른 모든 응용 프로그램을 화면에서 제거하도록 요청
- 사용자마다 사용하는 브라우저가 다르기에 (예: mozFullScreenElement, msFullscreenElement, webkitFullscreenElement)을 확인해야 하고, 지원하지 않는 모델일 경우를 대비해서 alert로 예외처리도 해주자.
- 값이 null 이면 문서가 현재 창 모드이므로 전체 화면 모드로 전환해야 하며,
전체 화면 모드로의 전환은 요소를 호출 Element.requsetFullscreen()하여 수행. - fullScreen일 경우 클릭을 하면 fullScreen이 닫히고, fullScreen이 아닐 경우 클릭을 하면, fullScreen이 열린다.
const $fullScreen = get('.js-fullScreen')
$fullScreen.addEventListener('click', fullScreen)
const fullScreen = () => {
if ($player.requestFullscreen)
if (document.fullScreenElement) {
document.cancelFullScreen()
} else {
$player.requestFullscreen()
}
else if ($player.msRequestFullscreen)
if (document.msFullscreenElement) {
document.msExitFullscreen()
} else {
$player.msRequestFullscreen()
}
else if ($player.mozRequestFullScreen)
if (document.mozFullScreenElement) {
document.mozCancelFullScreen()
} else {
$player.mozRequestFullScreen()
}
else if ($player.webkitRequestFullscreen)
if (document.webkitFullscreenElement) {
document.webkitCancelFullScreen()
} else {
$player.webkitRequestFullscreen()
}
else {
alert('Not Supported')
}
}
- 비디오 play, replay, stop, mute 기능
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video
- click event를 사용하여 각각의 기능을 동작하는 함수를 생성하고
- 각 기능에 해당하는 button을 클릭 시 UI를 바꿔주기 위해서 buttonChange라는 함수를 하나 생성하였다.
- video에 내재되어있는 속성 progress, play, pause, muted, ended를 사용.
- 만약 비디오가 멈춰있거나 미디어의 끝에 도달해서 재생이 중지되었을 경우,
버튼은 pause를 표시하고 pause버튼 클릭 시 play.
반대로 아직 재생되고 있는 상태라면 버튼을 play로 표시하고 play버튼 클릭 시 pause. - 만약 리플레이 버튼을 누른다면, progress bar와 currentTime이 초기화되고,
비디오가 다시 새롭게 play 되고, play버튼은 pause로 바꾸어 중지시킬 수 있는 상태로 변환. - pause를 누르면 비디오가 멈추고 currentTime이 초기화되며, pause버튼을 play로 바꾸어 재생시킬 수 있는 상태로 변환.
- mute 버튼을 클릭 시 unmute로 변환되며 속성 역시 true로 전환된다. (unmute상태 : false)
$btnPlay.addEventListener('click', playVideo)
$btnReplay.addEventListener('click', replayVideo)
$btnStop.addEventListener('click', stopVideo)
$btnMute.addEventListener('click', mute)
const $player = get('.view video')
const playVideo = () => {
if ($player.paused || $player.ended) {
buttonChange($btnPlay, 'pause')
$player.play()
} else {
buttonChange($btnPlay, 'play')
$player.pause()
}
}
const replayVideo = () => {
resetPlayer()
$player.play()
buttonChange($btnPlay, 'pause')
}
const resetPlayer = () => {
$progress.value = 0
$player.currentTime = 0
}
const stopVideo = () => {
$player.pause()
$player.currentTime = 0
buttonChange($btnPlay, 'play')
}
const mute = () => {
if ($player.muted) {
buttonChange($btnMute, 'mute')
$player.muted = false
} else {
buttonChange($btnMute, 'unmute')
$player.muted = true
}
}
const buttonChange = (btn, value) => {
btn.innerHTML = value
console.log(btn.innerHTML)
}
- 비디오가 진행될 때 실행되는 progress
- video에 내재되어있는 속성 timeupdate, progress, duration, currrentTime를 사용.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/progress_event
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/currentTime - timeupdate : 시간이 업데이트되면 이벤트가 시작
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/timeupdate_event - duration : 요소의 미디어 길이를 초 단위로 나타냄.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/duration - getCurrent : $progress의 전체 넓이에서 내가 마우스로 클릭한 e.offsetX의 넓이를 나누어 퍼센트로 정의하여,
미디어 길이에서 퍼센트를 곱하면 현재 재생되고 있는 시간을 나타낸 후 currentTime에 넣어준다. - setProgress : 미디어 길이에서 100을 나눈 후, getCurrent에서 대입한 currentTime을 곱하여 재생되는 길이의 퍼센티지를 구하여 $progress의 value에 대입해주면, 프로그래스 바가 잘 작동된다.
- video에 내재되어있는 속성 timeupdate, progress, duration, currrentTime를 사용.
$player.addEventListener('timeupdate', setProgress)
$progress.addEventListener('click', getCurrent)
const setProgress = () => {
let percentage = Math.floor((100 / $player.duration) * $player.currentTime)
$progress.value = percentage
}
const getCurrent = (e) => {
let percent = e.offsetX / $progress.offsetWidth
$player.currentTime = percent * $player.duration
}
- 자료구조 / 알고리즘 (Js ver.) 강의
[ 출처, 참고 : 제로베이스 프런트엔드 스쿨 ]
728x90
'TDL' 카테고리의 다른 글
[TDL] 05/03 Today's-Done-List (0) | 2022.05.03 |
---|---|
[TDL] 05/02 Today's-Done-List (0) | 2022.05.02 |
[TDL] 04/29 Today's-Done-List (0) | 2022.04.29 |
[TDL] 04/28 Today's-Done-List (0) | 2022.04.29 |
[TDL] 04/26 Today's-Done-List (0) | 2022.04.26 |