diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/progress.css" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/progress.css" new file mode 100644 index 0000000..5e98f0e --- /dev/null +++ "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/progress.css" @@ -0,0 +1,112 @@ +/* SOURCE: https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/ */ + +input[type='range'] { + -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ + width: 100%; /* Specific width is required for Firefox. */ + background: transparent; /* Otherwise white in Chrome */ +} + +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; +} + +input[type='range']:focus { + outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */ +} + +input[type='range']::-ms-track { + width: 100%; + cursor: pointer; + + /* Hides the slider so custom styles can be added */ + background: transparent; + border-color: transparent; + color: transparent; +} + +/* Special styling for WebKit/Blink */ +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + border: 1px solid #000000; + height: 36px; + width: 16px; + border-radius: 3px; + background: #ffffff; + cursor: pointer; + margin-top: -14px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */ + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; /* Add cool effects to your sliders! */ +} + +/* All the same stuff for Firefox */ +input[type='range']::-moz-range-thumb { + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; + border: 1px solid #000000; + height: 36px; + width: 16px; + border-radius: 3px; + background: #ffffff; + cursor: pointer; +} + +/* All the same stuff for IE */ +input[type='range']::-ms-thumb { + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; + border: 1px solid #000000; + height: 36px; + width: 16px; + border-radius: 3px; + background: #ffffff; + cursor: pointer; +} + +input[type='range']::-webkit-slider-runnable-track { + width: 100%; + height: 8.4px; + cursor: pointer; + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; + background: #3071a9; + border-radius: 1.3px; + border: 0.2px solid #010101; +} + +input[type='range']:focus::-webkit-slider-runnable-track { + background: #367ebd; +} + +input[type='range']::-moz-range-track { + width: 100%; + height: 8.4px; + cursor: pointer; + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; + background: #3071a9; + border-radius: 1.3px; + border: 0.2px solid #010101; +} + +input[type='range']::-ms-track { + width: 100%; + height: 8.4px; + cursor: pointer; + background: transparent; + border-color: transparent; + border-width: 16px 0; + color: transparent; +} +input[type='range']::-ms-fill-lower { + background: #2a6495; + border: 0.2px solid #010101; + border-radius: 2.6px; + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; +} +input[type='range']:focus::-ms-fill-lower { + background: #3071a9; +} +input[type='range']::-ms-fill-upper { + background: #3071a9; + border: 0.2px solid #010101; + border-radius: 2.6px; + box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; +} +input[type='range']:focus::-ms-fill-upper { + background: #367ebd; +} diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/style.css" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/style.css" new file mode 100644 index 0000000..49b736d --- /dev/null +++ "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/css/style.css" @@ -0,0 +1,75 @@ +@import url('https://fonts.googleapis.com/css?family=Questrial&display=swap'); + +* { + box-sizing: border-box; +} + +body { + font-family: 'Questrial', sans-serif; + background-color: #666; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + max-height: 100vh; + margin: 0; +} + +h1 { + color: #fff; +} + +.screen { + cursor: pointer; + width: 60%; + background-color: #000 !important; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +.controls { + background: #333; + color: #fff; + width: 60%; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + display: flex; + justify-content: center; + align-items: center; + padding: 10px; +} + +.controls .btn { + border: 0; + background: transparent; + cursor: pointer; +} + +.controls .fa-play { + color: #28a745; +} + +.controls .fa-stop { + color: #dc3545; +} + +.controls .fa-pause { + color: #fff; +} + +.controls .timestamp { + color: #fff; + font-weight: bold; + margin-left: 10px; +} + +.btn:focus { + outline: 0; +} + +@media (max-width: 800px) { + .screen, + .controls { + width: 90%; + } +} diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/img/poster.png" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/img/poster.png" new file mode 100644 index 0000000..a0d1413 Binary files /dev/null and "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/img/poster.png" differ diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/index.html" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/index.html" new file mode 100644 index 0000000..41eca6b --- /dev/null +++ "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/index.html" @@ -0,0 +1,48 @@ + + + + + + + Custom Video Player + + + + + +

Custom Video Player

+ +
+ + + + 00:00 +
+ + + + + + diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/script.js" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/script.js" new file mode 100644 index 0000000..c8c7017 --- /dev/null +++ "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/script.js" @@ -0,0 +1,46 @@ +const $videoPlayer = document.getElementById('video'); +const $playButton = document.getElementById('play'); +const $stopButton = document.getElementById('stop'); +const $progressBar = document.getElementById('progress'); +const $timeStamp = document.getElementById('timestamp'); + +const playPauseVideo = () => { + if ($videoPlayer.paused) { + $playButton.firstElementChild.className = 'fa fa-pause fa-2x'; + $videoPlayer.play(); + return; + } + $playButton.firstElementChild.className = 'fa fa-play fa-2x'; + $videoPlayer.pause(); +}; + +const stopVideo = () => { + $playButton.firstElementChild.className = 'fa fa-play fa-2x'; + $videoPlayer.pause(); + $videoPlayer.currentTime = 0; +}; + +const renderCurrentVideoTime = () => { + const minutes = Math.floor($videoPlayer.currentTime / 60) + .toString() + .padStart(2, '0'); + const seconds = Math.floor($videoPlayer.currentTime - minutes * 60) + .toString() + .padStart(2, '0'); + + $timeStamp.textContent = `${minutes}:${seconds}`; + $progressBar.value = (100 / $videoPlayer.duration) * $videoPlayer.currentTime; +}; + +const handleProgressBar = (e) => { + $videoPlayer.currentTime = e.target.value * ($videoPlayer.duration / 100); +}; + +$videoPlayer.addEventListener('click', playPauseVideo); +$videoPlayer.addEventListener('ended', stopVideo); +$videoPlayer.addEventListener('timeupdate', renderCurrentVideoTime); + +$progressBar.addEventListener('change', handleProgressBar); + +$playButton.addEventListener('click', playPauseVideo); +$stopButton.addEventListener('click', stopVideo); diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/DJMAX_RESPECT_SOHAPPY.mp4" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/DJMAX_RESPECT_SOHAPPY.mp4" new file mode 100644 index 0000000..36d1fb9 Binary files /dev/null and "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/DJMAX_RESPECT_SOHAPPY.mp4" differ diff --git "a/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/gone.mp4" "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/gone.mp4" new file mode 100644 index 0000000..2e84739 Binary files /dev/null and "b/\353\260\225\354\204\261\355\230\270/3-CustomMoviePlayer/videos/gone.mp4" differ