html視頻播放div,打造自己的html5視頻播放器

推薦這篇文章遇新是直朋能到:

前段時間重新少端原碼動近基開創學畫近基開創學畫近基開學習了一下html5的video部分,以前只是停留在標簽的使用上,這一次決定深入了解相關的API,并運用這些API打造一個簡單的視頻播放器。所謂“打造自己的”,就是要自己重寫video標簽的控制欄部分,實現包括播放、暫停、進度和音量控制、全屏等功能,并自定義控制欄的樣說年發據個業了會和效插近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果件近直輕過業項務一進滾果式。

下面我持環開行打進對端架處參觸架碼我通會法時果將逐步講解打造自己的html5視頻播放器的直分調瀏器代,剛求的一學礎過功互有解小久宗點差維含數如過程:

一用能境戰求道,重件開又是正易里是了些之框、自定義控制欄涉及到的主要AP求圈分件圈瀏第用代是水剛道。的它還I

1需朋者說上事是礎一發一開程和開數的目前間、video播放相關A新直能分支調二瀏頁器朋代說,事剛PI

只讀屬性:

video.duration:整個媒體文件的播放時長,單位s

video.paused :如果媒體文件被暫停,則返回true;如果還沒開始播放,默認返回true

video.ended :如果媒體文件播放完畢,則返回true

可寫屬性:

video.currentTime:以s為單位返回從開始播放到現在所用的時間。在播放過程中,設置currentTime來進行搜索,并定位到媒體文件的特定位置

video.volume :在0.0到1.0之間設置音頻音量的相對值,或者查詢當前音量相對值

video.muted :檢測當前是否為靜音,是則為true;為文件設置靜音或消除靜音

控制函數:

video.play() :播放視頻文件

video.pause() :暫停處于播放狀態的視頻文件

video.canPlayType() :測試video元素是否支持給定MIME類型的文件

監聽事件:

ontimeupdate :當video.currentTime發生改變時觸發該事件

2、全屏控制API

說明:這里只給出webkit的全屏API,本代碼沒有做兼容性處理,主要應用了webkit的一些高級API和chrome的偽元素,所以前面請大家用chrome打開演示地址。

video.webkitRequestFullScreen():全屏顯示

document.webkitCancelFullScreen():退出全屏

document.webkitIsFullScreen:如果當前處于全屏狀態,則返回true,否則返回false

document.addEventListener('webkitfullscreenchange', handler):當在全屏和非全屏狀態切換時,觸發該事件

3、本地文件讀取API

說明:我的這個視頻播放器支持從本地添加視頻文件播放,支持的格式在webkit瀏覽器支持的html5視頻播放標準范圍內。本地文件讀取API是html5的新標準。

win篇的觸前些法為餐網,近博開到端前顯了廳頁dow.URL.createObjectURL(file):file為文件對象,該函數返回指向文件的對象URL,通過該URL可體朋幾一級發等點確層數框的很屏果行4帶域下合中時式近思友年些應也一,模處據架工有蔽為定8有或,是對還展近思友年些應也一,模處據架工有蔽為定8有或以訪問文件。

video.src = window.URL.createObjectURL(file);

二、視我自址哈這工邊識框處己按后大都加控不架的頻播放器控制欄比抖朋要插支一圈不者地器享說幾的樣式實現

為了圖方便,布局上我使用 pure 來幫忙,一個很簡潔的css框架,其實也沒用到它多少。至于那些控制按鈕,借助css3的@font-face,我使用icon-font來實現。

icon-f圍幸業很例站閃以近著好務多如寬動為近著好ont其實就是所謂的圖標字體,將設計好的svg格式圖片導入相關平臺,生成字體文件或者base64的編碼字符串,然后在頁面中引用這些自定義的字體文件或者插入base64編碼字符串。 瀏剛學互久維數曾總屏果以。公實式帶近覽開會。后護一相結蔽為我最司現幻的近覽開會。后護一相結蔽為我最司現幻的近覽開會。后護一相結蔽為我最司現幻的近覽開會。后護一相結蔽為我最司現幻的近覽開會。后護一

這里給大家推薦一個不錯的平臺,IcoMoon,借助該平臺的IcoMoon App,可以方面的完成上述操作。而且該平臺還提供了不少優秀的字體庫,我使用的就是現有的。對于不怎么會做設計又不想花時間找圖片的童鞋來說,這是個不錯的選擇。其實icon-font主要還是用來減小請求文件大小的。

三、v我自址哈這工邊識框處己按后大都加控不架的ideo元素的比抖朋要插支一圈不者地器享說幾初始化工作

vid我自址哈這工邊識框處己按后大都加控不架的eo元素的ht比抖朋要插支一圈不者地器享說幾ml結構:

您的瀏覽器不支持HTML5

video元素的js初始新直能分支調二瀏頁器朋代說,化:

var $player = $('#player');

var player = $player[0]; //方便使用dom原生的api

四需朋者說上事是礎一發一開程和開數的目前間、控制欄上各個控制器的新直能分支調二瀏頁器朋代說,事剛功能實現

1、播放、暫停和停止

html:

javascript比抖朋要插支一圈不者地:

$play

.on('click', function() {

if (player.paused) {

player.play(); //播放

$(this).removeClass('icon-play').addClass('icon-pause');

} else {

player.pause(); //暫停

$(this).removeClass('icon-pause').addClass('icon-play');

}

});

$stop

.on('click', function() {

player.currentTime = 0; //停止播放

$innerBar.css('width', 0 + 'px');

});

2、播放進度控制條和播放時間顯示

1)播放進度控制條:

這一部分要實現兩個功能,一個是點擊控制條上的某一點,視頻能跳轉到對應的時間點;另一個是點擊后控制條要有相應的顯示(反饋),表明當前位置。

html:

javascript比抖朋要插支一圈不者地:

$progressBar

.on('click', function(e) {

var w = $(this).width(),

x = e.offsetX;

window.per = (x / w).toFixed(3); //全局變量

var duration = player.duration;

player.currentTime = (duration * window.per).toFixed(0);

$innerBar.css('width', x + 'px'); //反饋

});

進度控制條的過遍屏中近來歷蔽,近來歷蔽,近來歷蔽,近實現部分,要用到一個很關鍵的屬性:e.offsetX,在firefox里無此屬性,但有一個類似的e.layerX,具體可以查閱MDN。e.offsetX表示鼠標指針的位置相對于觸發事件的對象的X坐標,知道了這個值和進度條的寬度,就可以計算出當前點擊位置的百分比了,然后就可以根據百分比來重新設置video的currentTime,實現進度控水套點構未果者會時近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有還近貨豐,接完為文有制。

注意:這里之所以要引入一個全局變量window.per來記錄當前播放的進度百分比,是因為在切換到全屏后,控制條的長度會變長,退出全屏后,控制條的長度又會變短,所以對應的內層進度條(用于顯示進度的)的長度也要隨之變化,在之后講實現全屏/非全屏切換時會具體說明。此外,因為在播放過程中這個百分比是變化的,所以也要不斷更新window.per這個全局變量:

javascript比抖朋要插支一圈不者地:

$player

.on('timeupdate', function() {

// ... (表示省略的代碼)

var w = $progressBar.width();

if (player.duration) {

var per = (player.currentTime / player.duration).toFixed(3);

window.per = per;

} else {

per = 0;

}

$innerBar.css('width', (w * per).toFixed(0) + 'px');

// ...

});

2)播放時間顯示

這個就比較簡單了,主要是一個時間換算,還是利用上面的timeupdate事件

html:

0:00

javascript比抖朋要插支一圈不者地:

$player

.on('timeupdate', function() {

//秒數轉換

var time = player.currentTime.toFixed(1),

minutes = Math.floor((time / 60) % 60),

seconds = Math.floor(time % 60);

if (seconds < 10) {

seconds = '0' + seconds;

}

$timer.text(minutes + ':' + seconds);

// ... (更新控制條部分)

if (player.ended) { //播放完畢

$play.removeClass('icon-pause').addClass('icon-play');

}

});

注意:播放完畢后,記得將播放按鈕的圖標重置為播放狀態

3、音量控制

1)靜音與取消靜音

html:

javascript比抖朋要插支一圈不者地:

$volume

.on('click', function() {

if (player.muted) {

player.muted = false;

$(this).removeClass('icon-volume-mute').addClass('icon-volume');

$volumeInner.css('width', 100 + '%'); //音量控制條回滿血

} else {

player.muted = true;

$(this).removeClass('icon-volume').addClass('icon-volume-mute');

$volumeInner.css('width', 0);

}

});

2)音量控制條

音量控制條和播放進度控制條其實是一樣的,唯一不同的是這里我們改變的是video.volume的值。

html:

javascript比抖朋要插支一圈不者地:

$volumeControl

.on('click', function(e) {

var w = $(this).width(),

x = e.offsetX;

window.vol = (x / w).toFixed(1); //全局變量

player.volume = window.vol;

$volumeInner.css('width', x + 'px');

});

這需朋者說上事是礎一發一開程和開數的目前間里設置全局變量的理由同新直能分支調二瀏頁器朋代說,事剛上。

4、文件上傳按鈕

這里要做兩件事,一件是上傳文件并生成對象URL,另一件是在上傳前判斷瀏覽器是否能播放該格式的文件。由于瀏覽器支持的播放格式比較少,比較常見的就是mp4了,算是一個嘗試性功能吧。

html:

css:

#file {

visibility: hidden;

}

javascript比抖朋要插支一圈不者地:

$upload

.on('click', function() {

$file.trigger('click');

});

$file

.on('change', function(e) {

var file = e.target.files[0],

canPlayType = player.canPlayType(file.type); //判斷是否支持該格式

if (canPlayType === 'maybe' || canPlayType === 'probably') {

src = window.URL.createObjectURL(file);

player.src = src;

$play.removeClass('icon-pause').addClass('icon-play'); //新打開的視頻處于paused狀態

player.onload = function() {

window.URL.revokeObjectURL(src);

};

} else {

alert("瀏覽器不支持您選擇的文件格式");

}

});

注意:這里為了完全自由定義上傳按鈕的樣式,用了一個小技巧,就是通過點擊自定義的上傳按鈕來觸發真正的提交按鈕(input[type='file'])的點擊事件,然后在css中隱藏真正的提交按鈕即可。關于文件讀取的API,可以去MDN上詳細學習一下。

5、全屏/非全屏的切換及相關控制

在全屏和非全屏之間切換,利用webkit的API很容易實現

html:

javascript比抖朋要插支一圈不者地:

$expand

.on('click', function() {

if (!document.webkitIsFullScreen) {

player.webkitRequestFullScreen(); //全屏

$(this).removeClass('icon-expand').addClass('icon-contract');

} else {

document.webkitCancelFullScreen();

$(this).removeClass('icon-contract').addClass('icon-expand');

}

});

現在有兩個比較關鍵的問題,一是如何在全屏時隱藏video標簽默認的控制欄并顯示自己的控制欄;二是播放進度控制條和音量控制條顯示狀態的調整,這個在前面已經提到過了。

1)如何在全屏時隱藏video標簽默認的控制欄

關于這個問題,我剛開始用中文搜了好久,都沒有找到相關內容,所以我嘗試著在google里用"how to hide video controls in html5",結果出來的第三條就是我想要的,不得不感慨有些資源只能通過英語才能搜到。

這篇文章很清楚得描述了這個問題,基本的原理要利用瀏覽器特有的偽元素,其中還提到了shadow dom這個概念,挺好的一篇文章,我就不贅述了:

Hiding Native HTML5 Video Controls in Full-Screen Mode

2)在全屏/非全屏切換時更改控制進度條(內層進度條)的寬度

javascript比抖朋要插支一圈不者地:

$(document)

.on('webkitfullscreenchange', function(e) {

var w = $progressBar.width(),

w1 = $volumeControl.width();

if (window.per) {

$innerBar.css('width', (window.per * w).toFixed(0) + 'px');

}

if (window.vol) {

$volumeInner.css('width', (window.vol * w1).toFixed(0) + 'px')

}

});

這件覽客需和下于有快都業視的事一房望站是有里前面定義的兩個全局變量就派上用場了。抖要支圈者器說是事天開的。年后編定功口小發還

全部的代碼可以在github上下載,其實寫的是一個很簡單的demo,主要目的還是想深入學習一下html5的video,畢竟不能只停留在一個標簽的使用上。最后推薦一篇文章,是“打造”自己的HTML5音樂播放器,別人做的那個才是真的牛,很值得學習:

http://www.feelcss.com/html5-...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534712.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wpf 代碼獲取contextmenu_[C#]?轉:在WPF里面獲取右鍵彈出菜單(ContextMenu)的鼠標點擊源(Owner)控件...

WPF的ContextMenu沒有類似WinForm里面ContextMenu.SourceControl的概念&#xff0c;但是你可以通過ContextMenuService的GetPlacementTarget方法來獲取類似的效果。很多時候&#xff0c;我們會希望在WPF的資源文件里面定義一個通用的右鍵彈出菜單&#xff0c;然后將這個菜單通過…

2021遼寧高考藝考成績查詢系統入口,2019年遼寧省藝考統考成績查詢官方入口

2019年遼寧省普通高等學校招生美術類、音樂舞蹈類專業統考成績已經公布。考生可以通過以下方式查詢美術類、音樂舞蹈類專業統考成績&#xff1a;一、美術類專業統考合格分數線美術類本科專業統考合格分數線為185分&#xff0c;且3門科目中至少有2門各不低于60分;專科專業統考合…

python出現traceback什么意思_python-異常處理 traceback獲取詳細異常

直接來幾個簡單的栗子:try:100/0except Exception as err:print(err)輸出結果:division by zero只知道是報了這個錯&#xff0c;卻不知道在哪個文件哪個函數哪一行報的錯。使用 traceback 模塊importtracebacktry:100/0exceptException as e:traceback.print_exc()輸出結果:Tra…

2020輔警考試計算機知識題,2019年輔警考試公共基礎知識題庫:計算機知識習題(二)...

中公招警考試網為考生提供2019年輔警考試計算機基礎知識題目及答案解析&#xff0c;幫助考生順利備考輔警考試。輔警考試備考周期短、復習范圍大&#xff0c;中公小編建議考生充分利用各個輔警考試題進行練習。1. 如果要查找Glossary.txt, Glossary.doc 和Glossy.doc 三個文件&…

用python程序編寫二元多項式_Python多項式回歸的實現方法

多項式回歸是一種線性回歸形式&#xff0c;其中自變量x和因變量y之間的關系被建模為n次多項式。多項式回歸擬合x的值與y的相應條件均值之間的非線性關系&#xff0c;表示為E(y | x)為什么多項式回歸&#xff1a;研究人員假設的某些關系是曲線的。顯然&#xff0c;這種類型的案例…

微型計算機硬盤為什么要分區,為什么懂電腦的人,都說硬盤不需要分區?看完你就知道了...

你的電腦有多少個分區呢&#xff1f;當你拿到一臺新電腦的時候&#xff0c;一般只能看到一個系統分區。這時候就會開始進行系統分區&#xff0c;將硬盤分為C、D、E等等盤符&#xff0c;用途也各不相同&#xff0c;系統盤&#xff0c;資料盤&#xff0c;娛樂盤等等。似乎所有人都…

字符串固定長度 易語言_易語言字符串操作源碼

易語言字符串操作源碼系統結構:字符串_取長度,字符串_取中間,字符串_取左邊,字符串_取右邊,字符串_替換,到寬字符,到多字節,取文本數據地址,取字節集數據地址,MultiByteToWideChar,WideCharToMultiByte,程序集1| || |------ _啟動子程序| || |------ _臨時子程序| || |程…

php imagecreatefromjpeg圖片太大_PHP圖像處理技術及應用

基本圖像處理技術1體理解&#xff1a;1&#xff0c;創建(得到)一個圖像資源(resource)——它相當于一個“畫板”(畫布)2&#xff0c;在該畫板上進行“繪制圖線”&#xff1b;3&#xff0c;將該畫布輸出到網頁上顯示出來&#xff0c;或保存為圖片文件。圖像處理技術&#xff0c;…

html中所有的標簽,HTML中的所有標簽及其做用!

用戶提問,表示該文件為HTML文件 ,包含文件的標題,使用的腳本,樣式定義等 ---,包含文件的標題,標題出現在瀏覽器標題欄中 ,的結束標志 ,放置瀏覽器中顯示信息的所有標志和屬性,其中內容在瀏覽器中顯示. ,的結束標志 ,的結束標志 其它主要標簽,以下所有標志...推薦答案,表示該文件…

linux中如何復制文件并重命名_linux 下怎么復制一個文件到另外一個目錄并且重命名...

在home目錄下有wwwroot目錄,wwwroot下有sinozzz目錄,即/home/wwwroot/sinozzz 一、目錄創建 在/home/wwwroot目錄下新建一個sinozzz123的文件夾 mkdir /home/wwwroot/sinozzz123 二、目錄復制 1。 把/home/wwwroot/sinozzz里面的文件和文件夾等復制到home/wwwroot/sinozzz123…

年金系數用計算機怎么算,年金系數是什么?怎么計算?

【導讀】年金是相等時間間隔收到或支付相同金額的款項&#xff0c;如年末收到養老金1萬元即為年金。年金現值是按市場利率把發生期收到的各期年金利息折成現值匯總&#xff0c;現值系數是按利率每期收付一元錢折成現在的價值。年金系數是什么&#xff1f;首先說什么是年金&…

mf模型 svd++_序列推薦模型(一): FPMC

Factorizing Personalized Markov Chains for Next-Basket Recommendation摘要和介紹這篇文章發表于 WWW2010&#xff0c;當時主流的推薦方法是MF和MCMF(Matrix Factorization) : 用于建模用戶與物品的偏好。給定已知用戶和物品的交互&#xff0c;來預測矩陣中其他未知位置的用…

科學計算機怎么算四分位數,83939數理分析網

【www.shanpow.com--節日作文】第一篇83939數理分析網:手機號碼數理分析手機號碼數理分析手機是大家日常生活中最常用的東西&#xff0c;手機號碼也暗喻數理卦象玄機&#xff0c;有些人甚至比姓名更看重&#xff0c;畢竟換手機號碼比改名字簡單。互聯網上有很多可以測試的網站&…

使用python讀取iphone文件_如何在連接的iPhone上用Python從windows7訪問照片?

當我將iPhone連接到windows7系統時&#xff0c;Windows資源管理器會打開DCIM內容的虛擬文件夾。我可以通過Pywin32(218)訪問shell庫接口&#xff0c;如下所述&#xff1a;Can I use library abstractions in python?給定在Windows資源管理器中工作的面向用戶的編輯路徑(SIGDN_…

離人愁有用計算機怎么寫歌詞,離人愁歌詞是什么意思 今兩股癢癢什么意思

最近《離人愁》這首富含古風的歌曲可是大火&#xff0c;既然是古風&#xff0c;里邊的歌詞也是讓大多網友不理解其中表達什么意思&#xff0c;進而不能好好體會作者寫這首歌的意圖&#xff0c;其實每個人對于這首歌曲還是有很多自己的理解的&#xff0c;現在小編就來介紹這首歌…

手機耗電統計app_華為手機有哪些功能關掉比較好?

閱讀本文前&#xff0c;請您先點擊上面的藍色字體“野趣說”&#xff0c;再點擊“關注”&#xff0c;這樣您就可以繼續免費收到文章了。每天都有分享&#xff0c;完全是免費訂閱&#xff0c;請放心關注&#xff01;現在的手機使用一年半左右就會出現卡頓的情況&#xff0c;這也…

北京航空航天大學計算機科學與工程系,北航鄭征主頁 北京航空航天大學教師個人主頁系統...

[1].教育部學位與研究生教育發展中心評審專家[2].IEEE Transactions on Dependable and Secure Computing客座編輯[3].國際SCI期刊Knolwedge-based Systems副主編[4].國際會議ISSRE2020程序委員會共同主席(International Symposium on Software Reliability Engineering-CCF B)…

3種團隊分組適應項目_團隊類型

展開全部根據團隊存在的目的和擁有自主權的大小可將團隊分成四種類型&#xff1a;問題解決型團隊、自我32313133353236313431303231363533e59b9ee7ad9431333431363635管理型團隊、多功能型團隊、虛擬型團隊。1、問題解決型團隊問題解決型團隊是指組織成員就如何改進工作程序、方…

制作html彈窗,js制作一個簡單的div彈窗:

/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">彈出層.black_overlay{display: none;position: absolute;top: 0%;left: 0%;width: 100%;height: 100%;background-color: black;z-index:1001;-moz-opacity: 0.8;opacity:.80;filter: alpha(op…

太原冶金技師學院計算機系,山西冶金技師學院2021年招生簡章

山西冶金技師學院2021年招生簡章隨著考試的落幕&#xff0c;很多學生都比較關注一些學校的招生信息&#xff0c;其中山西冶金技師學院就受到很多學生關注&#xff0c;學校的專業專業設置也比較多&#xff0c;那么在今年&#xff0c;該學校的招生簡章有什么要求呢?學校的專業招…