麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > HTML > 正文

從零實現一個自定義html5播放器的示例代碼

2024-08-26 00:19:50
字體:
來源:轉載
供稿:網友

本次的分享是一個基于HTML5標簽實現的一個自定義視頻播放器。其中實現了播放暫停、進度拖拽、音量控制及全屏等功能。

效果預覽

html5自定義播放器,html自定義音樂播放器,html自定義播放器

點我查看 源碼倉庫 。

核心思路

我相信一定會有些沒有接觸過制作自定義播放器的童鞋對于 標簽的認識會停留在此。

<video controls="controls" autoplay="autoplay">  <source src="movie.ogg" type="video/ogg" /></video>

其中controls屬性經過設定,會在界面中顯示一個瀏覽器自帶的控制條。如果對于UI沒有要求的需求,其內置控制器已經可以滿足大部分的需求。當然了如果是這樣你們也不會看到這篇分享了=。=

隱藏控制條并模擬

那么實現一個自定義功能的播放器關鍵就在于,我們不使用原生的控制器,將其隱藏掉之后,在下方同樣的位置通過html、css來模擬所需樣式,同時通過js來調用vedio標簽所暴露給我們的接口函數及屬性,以及檢測用戶的操作行為來同步的模擬UI與視頻播放數據的相應變化。

幾個核心函數及屬性的用法

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 - 關于音頻/視頻就緒的元數據//2 = HAVE_CURRENT_DATA - 關于當前播放位置的數據是可用的,但沒有足夠的數據來播放下一幀/毫秒//3 = HAVE_FUTURE_DATA - 當前及至少下一幀的數據是可用的//4 = HAVE_ENOUGH_DATA - 可用數據足以開始播放

在所有實現中的關鍵點,較為繁瑣的是對于進度條的模擬。其中使用了video標簽中的currentTime以及duration屬性,通過當前播放時間與總播放時間的比值,就可以計算出進度條相對于總長的位置。同時用戶通過拖拽進度條所最后設置的長度也可以用來反向推算出此時視頻應該播放的位置。

拖拽代碼思路

//核心代碼示例var dragDis = 0var processWidth = xxx //拖拽條總長$('body').mousedown(function(e) {    startX = e.clientX    dragDis = startX - leftInit //leftInit為拖拽條起始點巨屏幕左側的距離    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)

核心的控制部分已經說完了,有興趣的同學可以去源碼的html中點擊播放,其中被迫有很多零碎的需求,比如點擊暫停,保存音量等等。整個視頻播放器的基礎功能實現的還算完善。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 一级做受大片免费视频 | 91福利影视| 黄色大片网站在线观看 | 久久影院一区二区三区 | 久久久麻豆 | 色妞欧美 | www.成人在线 | 成人在线不卡 | 亚洲精品 欧美 | 久久久久久亚洲综合影院红桃 | 激情久久精品 | 日产精品一区二区三区在线观看 | av手机免费在线观看 | 一级黄色毛片免费 | 4p一女两男做爰在线观看 | 日本网站在线看 | 欧美黄色性视频 | 精品国产一区二区三区久久久蜜月 | 国产日韩免费观看 | 免费观看又色又爽又黄的崩锅 | 一区二区三区黄色 | 精品91av| 国产羞羞视频在线观看免费应用 | 久久777国产线看观看精品 | 久久免费观看一级毛片 | 欧美一级全黄 | 午夜热门福利 | 欧美日韩专区国产精品 | 欧美性猛交一区二区三区精品 | 亚洲国产精品久久久久婷婷老年 | 黄视频免费在线 | xxxxxx免费| 精品一区二区在线视频 | 综合在线一区 | 一级黄色av电影 | 国产伦精品一区二区三区 | av在线高清观看 | 成人毛片视频在线播放 | 亚洲射情 | 亚洲成人在线免费 | 欧美三级日本三级少妇99 |