[JavaScript30] 🎞 28. Video Speed Controller UI

μ‘°μ€€ν˜•Β·2021λ…„ 8μ›” 18일
0

JavaScript30

λͺ©λ‘ 보기
28/30

🎞 28. Video Speed Controller UI

λ§ˆμš°μŠ€μ΄λ™μ— λ”°λ₯Έ μ˜μƒ μž¬μƒμ†λ„ 쑰절

초기 μ½”λ“œ

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Video Speed Scrubber</title>
    <link rel="stylesheet" href="style_JuneHyung.css">
</head>
<body>
    <div class="wrapper">
        <video class="flex" width="765" height="430" src="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" loop controls></video>
        <div class="speed">
          <div class="speed-bar">1Γ—</div>
        </div>
      </div>
</body>
</html>

초기 ν™”λ©΄

🌏 μƒˆλ‘œ μ•Œκ²Œ 된 것

πŸ‘‰ HTMLMediaElement.playbackRate

λ―Έλ””μ–΄κ°€ μž¬μƒλ˜λŠ” 속도λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
빨리 감기, 슬둜우 λͺ¨μ…˜ 등에 λŒ€ν•œ μ‚¬μš©μž μ»¨νŠΈλ‘€μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
정상 μž¬μƒ 속도에이 값을 κ³±ν•˜μ—¬ ν˜„μž¬ 속도λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. 1.0 값은 정상 속도λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

μ°Έκ³  :

https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playbackRate

🌏 κ³Όμ •

πŸ‘‰ 1. λ³€μˆ˜μ„ μ–Έ

const speed = document.querySelector('.speed');
const bar = speed.querySelector('.speed-bar');
const video = document.querySelector('.flex');

πŸ‘‰ 2. λ†’μ΄μ‘°μ ˆ

height λ₯Ό %둜 쑰절

const speed = document.querySelector('.speed');
const bar = speed.querySelector('.speed-bar');
const video = document.querySelector('.flex');

speed.addEventListener('mousemove', function(e){
    // console.log(e);
    const y = e.pageY - this.offsetTop;
    const percent = y / this.offsetHeight;
    const min = 0.4;
    const max = 4;

    const height = Math.round(percent * 100) + '%';
    console.log(height);

    bar.style.height = height;
    // console.log(y);
    // console.log(percent);
});

πŸ‘‰ 3. λΉ„μœ¨μ‘°μ ˆ

λ―Έλ””μ–΄κ°€ μž¬μƒλ˜λŠ” 속도 계산.

const speed = document.querySelector('.speed');
const bar = speed.querySelector('.speed-bar');
const video = document.querySelector('.flex');

speed.addEventListener('mousemove', function(e){
    // console.log(e);
    const y = e.pageY - this.offsetTop;
    const percent = y / this.offsetHeight;
    const min = 0.4;
    const max = 4;

    const height = Math.round(percent * 100) + '%';
    const playbackRate = percent * (max - min) + min;
    console.log(height);

    bar.style.height = height;
    bar.textContent = playbackRate.toFixed(2) + 'x';
    // console.log(y);
    // console.log(percent);
});

πŸ‘‰ 4. video적용 및 method뢄리

video의 playbackRate값을 κ³„μ‚°ν•œ κ°’μœΌλ‘œ μ„€μ •.

video.playbackRate = playbackRate;

λ©”μ†Œλ“œ 뢄리.

const speed = document.querySelector('.speed');
const bar = speed.querySelector('.speed-bar');
const video = document.querySelector('.flex');

function handleMove(e){
    const y = e.pageY - this.offsetTop;
    const percent = y / this.offsetHeight;
    const min = 0.4;
    const max = 4;

    const height = Math.round(percent * 100) + '%';
    const playbackRate = percent * (max - min) + min;

    bar.style.height = height;
    bar.textContent = playbackRate.toFixed(2) + 'x';
    video.playbackRate = playbackRate;
}

speed.addEventListener('mousemove', handleMove);

profile
κΉƒν—ˆλΈŒ : github.com/JuneHyung

0개의 λŒ“κΈ€