JS30. Задание 28 Video Speed Controller
Демо: https://js3028.github.io/
Код: https://github.com/js3028/js3028.github.io
В этом проекте мы создаем инструмент, который изменяет скорость воспроизведения видео.
Разметка:
<div class="wrapper">
<video class="flex" width="765" height="430" src="video.mp4" loop controls></video>
<div class="speed">
<div class="speed-bar">1×</div>
</div>
</div>
В HTML у нас есть элемент видео, div для регулятора скорости, и контейнер div.
Ничего нового в CSS
Код Javascript.
var speed = document.querySelector(".speed");
var bar = speed.querySelector(".speed-bar");
var video = document.querySelector("video");
Первое, что мы делаем в файле Javascript, - находим переменные.
Затем мы добавляем слушатель mousemove к регулятору скорости speed
speed.addEventListener("mousemove", handleMove);
В качестве аргумента передаём ему функцию handleMove.
function handleMove(e) {
var y = e.pageY - this.offsetTop;
var percent = y / this.offsetHeight;
var min = 0.1;
var max = 4;
var height = Math.round(percent * 100) + "%";
var playbackRate = percent * (max - min) + min;
bar.style.height = height;
bar.textContent = playbackRate.toFixed(2) + "×";
video.playbackRate = playbackRate;
}
Эта функция сначала вычисляет, где пользователь щелкнул по строке скорости, используя «event.pageY», и вычитает из нее точку, где панель начинается на странице this.offsetTop. Это значение сохраняется в переменной «y». Затем мы превращаем значение «y» в процент, разделяя «y» на высоту бара «this.offsetHeight»
Результат вычисления будет использоваться для определения процента height для стиля css
.speed-bar {
...
height: 16.3%;
}
Переменная 'height' равна значению percent , умноженному на сто, округленному до ближайшего целого числа + «%» в конец значения
var height = Math.round(percent * 100) + "%";
Затем мы устанавливаем это значение равным «bar.style.height», что позволяет нам перетаскивать и помещать наполнитель скорости.
bar.style.height = height;
Нам нужны переменныъ для минимального и максимального значений.
var min = 0.1;
var max = 4;
Минимальное значение установлено равным 0,1, а максимальное значение равно 4. Когда высота бара составляет 0% от общей высоты, минимальное значение должно быть 0,4, а когда оно составляет 100% от высоты, скорость воспроизведения должна быть равна 4. Чтобы сделать это, мы используем следующую строку кода:
var playbackRate = percent * (max - min) + min;
Выводим значение высоты/скорости в баре.
bar.textContent = playbackRate.toFixed(2) + "×";
Метод toFixed(2) округляет число до двух знаков после запятой и возвращает строку. Как раз то, что нам нужно
Скорость воспроизведения видео меняет строка
video.playbackRate = playbackRate;
Собственно. её одной достаточно для выполнения проекта. Весь остальной код - визуализация, созданная для удобства пользователя.
Код полностью:
var speed = document.querySelector(".speed");
var bar = speed.querySelector(".speed-bar");
var video = document.querySelector("video");
function handleMove(e) {
var y = e.pageY - this.offsetTop;
var percent = y / this.offsetHeight;
var min = 0.1;
var max = 4;
var height = Math.round(percent * 100) + "%";
var playbackRate = percent * (max - min) + min;
bar.style.height = height;
bar.textContent = playbackRate.toFixed(2) + "×";
video.playbackRate = playbackRate;
}
speed.addEventListener("mousemove", handleMove);