目標
使用 div 來製作一個速度條,來調整影片播放速度
Demo | Github
處理步驟
不使用 input ,改使用 div ,透過滑鼠位置與 div 大小來計算播放速度
步驟 1.
取得速度元素的 DOM ,然後建立 mousemove 滑鼠移動事件的觸發
1 2 3 4 5 6 7 8 9 10 11 12 13
| const speed = document.querySelector(".speed");
const bar = speed.querySelector(".speed-bar");
function handleMove(e) { }
speed.addEventListener("mousemove", handleMove);
|
步驟 2.
計算滑鼠在速度條上的位置,利用相對位置與速度條的大小計算比例;然後依照該比例去計算播放速度
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
function handleMove(e) { const mousePoint = e.pageY - this.offsetTop; const mousePercent = mousePoint / this.offsetHeight; const min = 0.4, max = 4; const playSpeed = mousePercent * (max - min) + min; }
|
步驟 3.
更換速度條的樣式與內容文字,以及播放器的播放速度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const video = document.querySelector("video");
function handleMove(e) { const mousePoint = e.pageY - this.offsetTop; const mousePercent = mousePoint / this.offsetHeight; const min = 0.4, max = 4; const playSpeed = mousePercent * (max - min) + min; bar.style.height = `${Math.round(mousePercent * 100)}%`; bar.textContent = `${playSpeed.toFixed(2)}X`; video.playbackRate = playSpeed; }
|
筆記與備註事項
JavaScript 部分
格式化數字,設定顯示小數位,最多到 20 位數
1 2 3 4 5 6 7 8 9 10 11
| var numObj = 12345.6789;
numObj.toFixed(); numObj.toFixed(1); numObj.toFixed(6); (1.23e+20).toFixed(2); (1.23e-10).toFixed(2); 2.34.toFixed(1); 2.35.toFixed(1); -2.34.toFixed(1); (-2.34).toFixed(1);
|
參考資料