diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/assets/img/poster.png" "b/\354\244\200\354\204\234/CustomVideoPlayer/assets/img/poster.png" new file mode 100644 index 0000000..a0d1413 Binary files /dev/null and "b/\354\244\200\354\204\234/CustomVideoPlayer/assets/img/poster.png" differ diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/assets/video/gone.mp4" "b/\354\244\200\354\204\234/CustomVideoPlayer/assets/video/gone.mp4" new file mode 100644 index 0000000..2e84739 Binary files /dev/null and "b/\354\244\200\354\204\234/CustomVideoPlayer/assets/video/gone.mp4" differ diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/css/progress.css" "b/\354\244\200\354\204\234/CustomVideoPlayer/css/progress.css" new file mode 100644 index 0000000..a00d259 --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/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/\354\244\200\354\204\234/CustomVideoPlayer/css/style.css" "b/\354\244\200\354\204\234/CustomVideoPlayer/css/style.css" new file mode 100644 index 0000000..bcf6c76 --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/css/style.css" @@ -0,0 +1,82 @@ +@import url("https://fonts.googleapis.com/css?family=Questrial&display=swap"); + +* { + box-sizing: border-box; +} + +body { + font-family: "Questrial", sans-serif; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + max-height: 100vh; + + margin: 0; + + background-color: #666; +} + +h1 { + color: #fff; +} + +.screen { + cursor: pointer; + + width: 50%; + + background-color: #000 !important; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +.controls { + display: flex; + justify-content: center; + align-items: center; + + width: 50%; + + padding: 10px; + + color: #fff; + + background-color: #333; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; +} + +.controls .btn { + cursor: pointer; + + border: 0; + background-color: transparent; +} + +.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; +} + +@media (max-width: 800px) { + .screen, + .controls { + width: 90%; + } +} diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/index.html" "b/\354\244\200\354\204\234/CustomVideoPlayer/index.html" new file mode 100644 index 0000000..ba28f0c --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/index.html" @@ -0,0 +1,46 @@ + + + + + + + Custom Video Player + + + + + +

Custom Video Player

+ +
+ + + + 00:00 +
+ + + + diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/src/app.js" "b/\354\244\200\354\204\234/CustomVideoPlayer/src/app.js" new file mode 100644 index 0000000..d08541b --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/src/app.js" @@ -0,0 +1,57 @@ +import $ from "./lib/util/dom.js"; +import setTime from "./lib/util/setTime.js"; + +const $video = $("#video"); +const $playButton = $("#play"); +const $stopButton = $("#stop"); +const $progress = $("#progress"); +const $timeStamp = $("#timestamp"); + +const toggleVideoStatus = () => { + if ($video.paused) { + $video.play(); + return; + } + $video.pause(); +}; + +const updatePlayIcon = () => { + if ($video.paused) { + $playButton.innerHTML = ''; + return; + } + $playButton.innerHTML = ''; +}; + +const updateProgress = () => { + $progress.value = ($video.currentTime / $video.duration) * 100; + + const minutes = setTime(Math.floor($video.currentTime / 60)); + const seconds = setTime(Math.floor($video.currentTime % 60)); + + $timeStamp.innerHTML = `${minutes}:${seconds}`; +}; + +const setVideoProgress = () => { + $video.currentTime = (Number($progress.value) * $video.duration) / 100; +}; + +const stopVideo = () => { + $video.currentTime = 0; + $video.pause(); +}; + +const init = () => { + $video.addEventListener("click", toggleVideoStatus); + $video.addEventListener("pause", updatePlayIcon); + $video.addEventListener("play", updatePlayIcon); + $video.addEventListener("timeupdate", updateProgress); + + $playButton.addEventListener("click", toggleVideoStatus); + + $stopButton.addEventListener("click", stopVideo); + + $progress.addEventListener("change", setVideoProgress); +}; + +init(); diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/dom.js" "b/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/dom.js" new file mode 100644 index 0000000..5e538a1 --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/dom.js" @@ -0,0 +1,3 @@ +const $ = (selector) => document.querySelector(selector); + +export default $; diff --git "a/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/setTime.js" "b/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/setTime.js" new file mode 100644 index 0000000..0ec6418 --- /dev/null +++ "b/\354\244\200\354\204\234/CustomVideoPlayer/src/lib/util/setTime.js" @@ -0,0 +1,3 @@ +const setTime = (time) => (time < 10 ? `0${time}` : time); + +export default setTime;