基于JavaScript構建高級視頻播放器
前言
在當今數字化的時代,視頻內容在我們的日常生活中扮演著至關重要的角色。無論是在線教育、娛樂還是信息傳播,一個能夠滿足用戶需求的播放器都能極大地提升用戶體驗。
html部分
首先我們頁面是這樣的。

視頻上方有一個文件輸入框,視頻居中在頁面上。視頻的右邊有一個滑塊,用來控制視頻的播放速度;滑塊上的數值為播放速率。
<main class="container">
<label for="file-upload" class="custom-file-upload">
<input type="file" id="file-upload" accept="video/*">
上傳視頻
</label>
<div id="video-container">
<div class="wrapper">
<!-- 行內塊元素 -->
<video src="" width="765" height="430" controls id="video"></video>
<div class="speed">
<div class="speed-bar">1x</div>
</div>
</div>
</div>
</main>
思路
首先我們用wrapper盒子包括視頻和滑塊,再用container盒子包括wrapper盒子和文件輸入框。這樣我們就有大概的html框架思路。
- container盒子的標簽我們使用main而不使用div,是因為mian更具有語義化,表示這個頁面的主體內容。
- label標簽用于將表單中的輸入元素(如文本輸入框、單選按鈕、復選框等)與相關的文本描述關聯起來。label標簽通過將 for 屬性值設置為輸入元素的 id 屬性值,建立與輸入元素的關聯。
- 在input標簽中type="file"表示該輸入框為文件輸入框。accept="video/*"表示該文件輸入框只接收視頻文件。
- video標簽的controls表示顯示視頻控制器。
css部分
首先在寫css代碼的第一步就是清除所有標簽的默認內邊距和外邊距。
* {
margin: 0;
padding: 0;
}
然后我們?yōu)榱俗屛覀兊捻撁娓每?,我們可以添加頁面背景,我們要將背景添加到body標簽中才能覆蓋整個頁面。
body {
background-image: url(./11.jpg);
background-size: 100%;
}
我們看wrapper盒子里的css樣式。
.wrapper {
/* 固定定位,以瀏覽器屏幕(可視窗口)為參考系 */
position: fixed;
/* 相對于瀏覽器屏幕向左移動百分之五十 */
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
display: flex;
}
為了讓將 .wrapper元素固定在瀏覽器窗口的中央位置。
- 首先給.wrapper元素相對于瀏覽器窗口進行定位
- 將元素的左側和頂部定位到窗口的 50% 位置
- 使用 translate 方法將元素在水平和垂直方向上各移動自身寬度和高度的 50%,以實現居中效果。
display: flex; 將元素設置為 Flex 布局,允許在該元素內進行靈活的子元素排列。
滑塊的css樣式
.speed {
width: 50px;
height: 430px;
background-color: #fff;
border-radius: 50px;
/* 允許內容溢出并隱藏 */
overflow: hidden;
}
.speed-bar {
width: 100%;
height: 16%;
background: linear-gradient(to bottom, #2376ae, #c16ecf);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.speed-bar元素生成了一個從頂部的#2376ae 到底部的#c16ecf 的線性漸變。
background: linear-gradient(to bottom, #2376ae, #c16ecf);
使用 flex 布局,使子元素在水平和垂直方向上居中對齊。
display: flex; justify-content: center; align-items: center;
設置鼠標指針為指針樣式
cursor: pointer;
JavaScript部分
我們現在還不知道要視頻的URL,我們要獲得視頻的URL并且賦值給id為"video"的video標簽的src屬性。
const fileUpload = document.getElementById('file-upload');
const video = document.getElementById('video');
fileUpload.addEventListener('change', function (e) {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = function (e2) {
video.src = e2.target.result;
}
reader.readAsDataURL(file)
})首先我們是思路是這樣:
- 首先我們創(chuàng)建一個fileUpload對象獲取#file-upload元素,創(chuàng)建一個video對象獲取#video元素
- 對fileUpload對象添加一個change事件監(jiān)聽,實現當用戶更改上傳文件時,觸發(fā)事件處理函數function(e)實現讀取文件并且使video標簽獲取視頻的URL。
- function(e)里的function(e2)函數是在讀取完文件后使video標簽獲取視頻的URL。
接下來我們要通過JavaScript實現當鼠標在 .speed元素上移動時,實時根據鼠標的位置來調整 .speed-bar 元素的高度,并同步更新視頻的播放速度。
var speed = document.querySelector('.speed')
var speedBar = document.querySelector('.speed-bar')
speed.addEventListener('mousemove', function (e) {
var y = e.pageY - speed.getBoundingClientRect().top
var percent = y / speed.offsetHeight
var height = Math.round(percent * 100) + '%'
speedBar.style.height = height
var min = 0.4
var max = 4
var palySpeed = percent * (max - min) + min
speedBar.textContent = palySpeed.toFixed(2) + 'x'
video.playbackRate = palySpeed
})
首先獲取頁面上具有 .speed'類和.speed-bar的元素
為 speed 元素添加鼠標移動事件監(jiān)聽器
- 獲取鼠標在 speed 元素上的垂直位置(相對于元素頂部)
- 計算垂直位置占 speed 元素高度的百分比
- 將百分比轉換為實際的高度值,并取整后加上 '%' 符號
- 使用 JavaScript 修改 speedBar 元素的高度為計算得到的高度
- 設置最小和最大播放速度范圍,根據百分比計算實際的播放速度,將播放速度顯示在 speedBar 元素的文本內容中
- 將視頻的播放速度設置為計算得到的播放速度
效果展示

快動手制作一個屬于自己的視頻播放器吧。
到此這篇關于基于JavaScript構建高級視頻播放器的文章就介紹到這了,更多相關JavaScript視頻播放器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript中offsetWidth的bug及解決方法
這篇文章主要為大家詳細介紹了JavaScript中offsetWidth的bug及解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
setInterval 和 setTimeout會產生內存溢出
jscript 5.7 發(fā)布修復了不少ie javascript內存泄露的問題。但是leak依然存在。當我們頻繁使用 setInterval 和 setTimeout 時就會每幾秒鐘出現32k leak...2008-02-02

