亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HTML5 audio 實驗

系統 1603 0

HTML5 audio 實驗

寒假即將結束,不巧膝蓋突然中了一箭,便決定實驗 HTML5? audio 標籤的效果,雖然已有? jPlayer ?這款輕便好用的播放器,但不折騰一下就沒辦法消磨時間了,所以本次的實驗品完全由我操刀。

開始之前

首先必須了解 audio 標籤的使用方式:

1
2
3
4
<audio controls>
<source src="music.mp3">
<source src="music.ogg">
</audio>

輸入以上代碼後,便可在網頁中看到瀏覽器內建的播放器。每種瀏覽器支援的播放類型不一,最保險的方法是備妥 mp3 、 ogg 。

為了浪費時間,當然不可能用瀏覽器的預設介面,所以刪除 controls 屬性,透過 JavaScript 操作:

1
2
3
4
5
var audio = document.getElementsByTagName( 'audio' )[ 0 ];
// 播放
audio.play();
// 暫停
audio.pause();

只需要懂這兩個函數,就可製作最基礎的播放器了,其他複雜的指令可參閱文末的參考出處。

介面

寫網頁時,比起最重要的 JavaScript,我習慣先寫 CSS,最初的參考範本是 Mac 的? CoverFlow

經過一連串絞盡腦汁,寫了一堆亂七八糟的 CSS 之後,成品如下。

無論是倒影、中間的圓圈進度表都與? CoverFlow ?非常相像,但這種樣式實在? 太麻煩了 ?不便使用者操作,所以從? Premium Pixels ?偷點子過來,稍微加油添醋一下,完成了播放器介面 Ver. 2。

Ver.2 與 Ver.1 完全不像?這種事情不重要啦!

核心

介面完成自爽一下之後,就得面對麻煩的 JavaScript 了,播放、暫停非常簡單,按鈕按下去執行鄉對應的動作即可,然而音量調整與進度條該如何處理呢?

雖然本次的重點是 消磨時間 ,但再去造一個輪子實在他媽的太累了,於是? 聰明如我 ?請到了? jQuery UI ,Slider 功能壓縮後需要約 20KB 的空間,有點龐大不過方便就好。

時間的控制方式如下,單位為秒數,例如跳至第 100 秒的位置:

1
audio.currentTime = 100 ;

音量的控制方式如下,範圍為 0~1,例如將音量調整至一半大?。?

1
audio.volume = 0.5 ;

audio 可綁定 play ,? pause ,? ended ,? progress ,? canplay ,? timeupdate 等事件。 play pause 如字面上意思,分別為播放、暫停後生效。

1
2
3
4
5
6
7
audio.addEventListener( 'play' , function (){
play.title = 'pause' ;
}, false );
              
audio.addEventListener( 'pause' , function (){
play.title = 'play' ;
}, false );

ended 為結束後生效,當音樂結束後,可透過此事件讓時間歸零。

1
2
3
audio.addEventListener( 'ended' , function (){
this .currentTime = 0 ;
}, false );

當音樂檔案開始載入後,便會啟動 progress 事件,可透過此事件監測下載進度。Firefox 可能會發生問題,建議搭配 durationchange 事件使用。

1
2
3
4
audio.addEventListener( 'progress' , function (){
var endVal = this .seekable && this .seekable.length ? this .seekable.end( 0 ) : 0 ;
buffer.style.width = ( 100 / ( this .duration || 1 ) * endVal) + '%' ;
}, false );

當音樂下載到一定程度後, canplay 事件便會生效,一般會透過此事件初始化播放器。相同類型的事件還有很多,依照啟動順序分別為: loadstart ,? durationchange ,? loadeddata ,? progress ,? canplay ,? canplaythrough 。

timeupdate 會在音樂播放時不斷生效,可透過此事件更新時間。

1
2
3
audio.addEventListener( 'timeupdate' , function (){
progress.style.width = ( this .currentTime / this .duration) * 100 + '%' ;
}, false );

播放列表

一個播放器的基礎功能就此完成,能夠播放、暫停、調整音量、調整時間。但這顯然還不夠,播放列表對於播放器而言相當重要。 (大概啦)

不要吐槽為啥播放列表裡全是動漫歌,林北就是宅啦...

與自己的邏輯奮戰大約一晚後,有播放列表、隨機播放、重複播放(單首、全部)功能的播放器於焉完成。只需要 214 行、約 6KB 的代碼 (未壓縮) 即可完成,應該能算是輕便簡易了。

後記

播放列表的製作過程有點髒,中途還重構了幾次,所以直接看範例應該會比較快,若對於範例內的程式碼感到疑惑,可在下方留言。

範例內已設定了一些參數,可在 js/script.js 內更改。第 5 行的 continous 參數為連續播放,第 6 行的 autoplay 參數為自動播放,第 7 行的 playlist 陣列請自行設定,壓縮檔內 不會 附帶範例內的音樂檔案。 playlist 陣列的格式如下:

1
2
3
4
5
6
7
8
9
10
var playlist = [
{
title: 'Tell Your World' ,
artist: 'livetune feat. 初音ミク' ,
album: 'Tell Your World' ,
cover: 'cover/tell_your_world.jpg' ,
mp3: 'music/tell_your_world.mp3' ,
ogg: 'music/tell_your_world.ogg'
}
];

title 為標題, artist 為演出者, album 為專輯名稱, cover 為專輯封面的路徑, mp3 、 ogg 分別為音樂檔案的路徑,建議備妥兩種格式的檔案, 要不然 Firefox 和 Opera 不就只能去死了嗎?

因為做到最後頭腦快爆炸了,懶得做 Flash fallback, IE 請去死一死吧。

範例 下載

參考出處

HTML5 audio 實驗


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区手机视频 | 又粗又大的机巴好爽视频视频 | 伊人国产在线观看 | 亚洲无总热门 | 亚洲综合伦理一区 | 中文字幕 亚洲精品 第1页 | 中文字幕视频在线观看 | 中文字幕不卡在线高清 | 国产极品嫩模大尺度福利视频 | 日韩精品一区二区三区中文在线 | 欧美成人香蕉网在线观看 | 97在线成人免费视频观看 | 久久se精品一区二区国产 | 永久黄网站色视频免费观看 | 狠狠五月婷婷 | 97在线免费看视频 | 一级毛片美国一级j毛片不卡 | 国产在线视精品麻豆 | 日韩欧美在线综合网高清 | 午夜在线播放 | 看久久| 香蕉一区 | 欧美成人性做爰网站免费 | 狠狠色狠狠色综合日日32 | 开心久久婷婷综合中文字幕 | 337p日本大胆欧洲色噜噜高清 | 免费福利在线播放 | 日本黄页网址 | 亚洲国产成人精品91久久久 | 奇米色在线视频 | 欧美老妇69交 | 亚洲第一欧美 | 一级黄网站 | 第一色区| 快播激情| 午夜一级毛片 | 亚洲tv精品一区二区三区 | 欧美日韩在线成人免费视频大全 | 悠悠久久 | 国产亚洲精品久久久久久 | 一区二区3区免费视频 |