這篇文章給大家分享的是有關如何實現(xiàn)自定義html5播放器的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設定制網(wǎng)站設計,是成都網(wǎng)站制作公司,為成都玻璃鋼坐凳提供網(wǎng)站建設服務,有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設計服務:原型圖制作、網(wǎng)站創(chuàng)意設計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站設計熱線:18982081108效果預覽
點我查看 源碼倉庫 。
核心思路
我相信一定會有些沒有接觸過制作自定義播放器的童鞋對于 標簽的認識會停留在此。
<video controls="controls" autoplay="autoplay"> <source src="movie.ogg" type="video/ogg" /> </video>
其中controls屬性經(jīng)過設定,會在界面中顯示一個瀏覽器自帶的控制條。如果對于UI沒有要求的需求,其內(nèi)置控制器已經(jīng)可以滿足大部分的需求。當然了如果是這樣你們也不會看到這篇分享了=。=
隱藏控制條并模擬
那么實現(xiàn)一個自定義功能的播放器關鍵就在于,我們不使用原生的控制器,將其隱藏掉之后,在下方同樣的位置通過html、css來模擬所需樣式,同時通過js來調(diào)用vedio標簽所暴露給我們的接口函數(shù)及屬性,以及檢測用戶的操作行為來同步的模擬UI與視頻播放數(shù)據(jù)的相應變化。
幾個核心函數(shù)及屬性的用法
myVid=document.getElementById("video1"); //控制視頻開關 myVid.play() //播放 myVid.pause() //暫停 //模擬視頻進度條 myVid.currentTime=5; //返回或設定當前視頻播放位置 myVid.duration // 返回視頻總長度 //模擬視頻音量 myVid.volume //音量 //獲取視頻當前狀態(tài)后判斷何時從loading切換為播放 myVid.readyState //0 = HAVE_NOTHING - 沒有關于音頻/視頻是否就緒的信息 //1 = HAVE_METADATA - 關于音頻/視頻就緒的元數(shù)據(jù) //2 = HAVE_CURRENT_DATA - 關于當前播放位置的數(shù)據(jù)是可用的,但沒有足夠的數(shù)據(jù)來播放下一幀/毫秒 //3 = HAVE_FUTURE_DATA - 當前及至少下一幀的數(shù)據(jù)是可用的 //4 = HAVE_ENOUGH_DATA - 可用數(shù)據(jù)足以開始播放
在所有實現(xiàn)中的關鍵點,較為繁瑣的是對于進度條的模擬。其中使用了video標簽中的currentTime以及duration屬性,通過當前播放時間與總播放時間的比值,就可以計算出進度條相對于總長的位置。同時用戶通過拖拽進度條所最后設置的長度也可以用來反向推算出此時視頻應該播放的位置。
拖拽代碼思路
//核心代碼示例 var dragDis = 0 var processWidth = xxx //拖拽條總長 $('body').mousedown(function(e) { startX = e.clientX dragDis = startX - leftInit //leftInit為拖拽條起始點巨屏幕左側(cè)的距離 dragTarget.css({ //拖拽按鈕 left: dragDis }) dragProcess.css({ //進度條(藍色進度條) width: dragDis }) // 令進度條和拖拽按鈕渲染在同一位置 videoSource.pause() }).mousemove(function(e) { moveX = e.clientX disX = moveX - startX var left = dragDis + disX if(left > processWidth) { left = processWidth } else if(left < 0) { left = 0 } dragTarget.css({ left: left }) dragProcess.css({ width: left }) }).mouseup(function(e) { videoSource.play() videoSource.currentTime = $('藍色拖拽條').width() / processWidth * duration //拖拽后計算視頻的正確播放位置 })
同理音量的控制與其上行為基本一致,故在源碼中作者將音量與進度部分通過不同元素進行判斷是進行進度還是音量的拖拽控制。
通過查詢視頻流狀態(tài)控制播放前的加載動畫
function ifState() { var state = videoSource.readyState if(state === 4) { //狀態(tài)為4即可播放 videoPlayer() } else { $('.play-sym-wrapper').remove() $('body').append('<div class="play-sym-wrapper"><img class="play-sym" src="./images/loading.gif"></div>') //添加loading動畫 setTimeout(ifState, 10) } } setTimeout(ifState, 10)
核心的控制部分已經(jīng)說完了,有興趣的同學可以去源碼的html中點擊播放,其中被迫有很多零碎的需求,比如點擊暫停,保存音量等等。整個視頻播放器的基礎功能實現(xiàn)的還算完善。
感謝各位的閱讀!關于“如何實現(xiàn)自定義html5播放器”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:如何實現(xiàn)自定義html5播放器-創(chuàng)新互聯(lián)
路徑分享:http://redsoil1982.com.cn/article36/dgihsg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、服務器托管、網(wǎng)站策劃、動態(tài)網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容