今天的題目依舊是前面技術的綜合演練,相對我們 Day11 客製的影片播放器可說是小巫見大巫,觀察 index-html 的結構可以發現我們需要控制及偵聽的節點非常簡單,外層是<div class="speed">
控制閥容器,內層<div class="speed-bar">
才是顏色填滿的區塊
<div class="speed">
<div class="speed-bar">1×</div>
</div>
// 影片容器
const video = document.querySelector("video");
// 速率控制閥容器
const speedContainer = document.querySelector(".speed");
// 速率條(顯示用)
const speedBar = document.querySelector(".speed-bar");
// 控制閥容器新增滑鼠移動事件監聽器
speedContainer.addEventListener("mousemove", handlePlayBackRate);
function handlePlayBackRate(e) {
// 設定最小及最大速率
const min = 0.4;
const max = 4;
// 百分比 = 滑鼠距離控制閥內部頂點的Y軸值 ÷ 控制閥的容器高度
const percent = e.offsetY / this.offsetHeight;
// 影片速率 = 算出來的百分比 * (最大值-最小值)+ 最小值
// 最後在四捨五入至小數點第二位
const videoRate = (percent * (max - min) + min).toFixed(2);
// 速率條的顏色填滿高度就等於 百分比*100 再四捨五入取整數
speedBar.style.height = `${Math.round(percent * 100)}%`;
// 速率條的顯示文字就等於算出來的影片速率
speedBar.textContent = `${videoRate}x`;
// 設定影片播放速率為滑鼠移動觸發事件後算出來的值
video.playbackRate = videoRate;
}