Javascript
Javascript30 - day28 Video Speed Controller UI
joy_lee
2021. 5. 6. 22:22
목표
비디오 옆의 bar를 움직여 재생 속도 조절하기
내가 작성한 코드
1
2
3
4
5
6
7
8
9
10
11
|
const speed = document.querySelector('.speed');
const bar = speed.querySelector('.speed-bar');
const video = document.querySelector('.flex');
speed.addEventListener('mousemove', (e) => {
e.preventDefault();
const height = e.offsetY
bar.style.height = `${(e.offsetY / 400) * 100}%`;
bar.innerHTML = `${(e.offsetY / 100).toFixed(1)}x`;
video.playbackRate = (e.offsetY / 100).toFixed(1);
})
|
cs |
offsetY로 마우스의 위치를 구하고, height와 속도를 구해서 입력해주었다.
영상의 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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) + '%';
// min <= playbackRate <= max
const playbackRate = percent * (max - min) + min;
bar.style.height = height;
bar.textContent = playbackRate.toFixed(2) + 'x';
video.playbackRate = playbackRate;
}
speed.addEventListener('mousemove', handleMove);
|
cs |
마우스의 위치를 e.pageY - this.offsetTop으로 구해준다.
persent는 y를 bar의 height로 나눈 값으로 만들어준다.(0과 1 사이의 값)
height는 Math.round를 통해 %단위를 정수로 만들어준다.
playbackRate는 최소 0.4, 최대 4를 가지는 변수로 percent * (max - min) + min 으로
원하는 범위 내의 값을 만들어 줄 수 있다.
bar 안에 들어갈 숫자는 .toFixed(2)로 소수점 둘째자리까지 나타내도록 한다.
새롭게 알게된 것
최대/최소값 사이의 수를 정하는 것을 어떻게 해야할지 몰라 그냥 놔뒀는데
percent(0과 1 사이의 값) * (max - min) + min 을 통해 할 수 있다.
bar의 높이를 측정해서 y / 400으로 하는 것 보다 y / this.offsetHeight;로 하는 것이 bar를 변경했을 때 수정이 필요 없이 코드를 그대로 사용할 수 있고, 다른 요소에 함수를 붙여서 사용할 수 있다.