好程式設計師前端分享使用JS開發簡單的音樂播放器
好程式設計師前端分享 使用 JS 開發簡單的音樂播放器 , 最近,我們在教學生使用 JavaScript ,今天就帶大家開發一款簡單的音樂播放器。首先,最終效果如圖所示:
首先,我們來編寫 html 介面 index.html ,程式碼如下 :
<! DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" />
< title ></ title >
< link rel = "stylesheet" type = "text/css" href = "css/style.css" />
< script src = "js/jquery-2.1.0.js" type = "text/javascript" charset = "utf-8" ></ script >
< script src = "js/common.js" type = "text/javascript" charset = "utf-8" ></ script >
</ head >
< body >
<!-- 播放器 -->
< audio id = "song" autoplay = "autoplay" ></ audio >
<!-- 整體結構 -->
< div id = "boxDiv" >
<!-- 歌詞展示區域 -->
< div id = "contentDiv" >
<!-- 歌詞顯示 -->
< div id = "lrcDiv" ></ div >
<!-- 上部陰影 -->
< span id = "bgTopSpan" ></ span >
<!-- 下部陰影 -->
< span id = "bgBottomSpan" ></ span >
</ div >
<!-- 控制區域 -->
< div id = "controlDiv" >
<!-- 進度條 -->
< div id = "progressDiv" ></ div >
<!-- 進度條圓點 -->
< img id = "pointerImg" src = "img/audio/progress_pointer@2x.png" />
<!-- 播放時間 -->
< span id = "playTimeSpan" >00:00</ span >
<!-- 歌曲標題 -->
< span id = "titleSpan" ></ span >
<!-- 總時間 -->
< span id = "totalTimeSpan" >00:00</ span >
<!-- 按鈕區域 -->
< div id = "buttonDiv" >
<!-- 上一首按鈕 -->
< img id = "prevImg" src = "img/audio/play_above_song@2x.png" />
<!-- 播放暫停按鈕 -->
< img id = "playOrPauseImg" src = "img/audio/play@2x.png" />
<!-- 下一首按鈕 -->
< img id = "nextImg" src = "img/audio/play_next_song@2x.png" />
</ div >
</ div >
</ div >
</ body >
</ html >
接下來,編寫 style.css ,程式碼如下:
body {
margin : px ;
background-color : #ccc ;
}
#boxDiv {
width : 375 px ;
height : 568 px ;
margin : 10 px auto ;
position : relative ;
}
#contentDiv {
width : 375 px ;
height : 460 px ;
background-image : url(../img/audio/play_bg@2x.png);
overflow : hidden ;
}
#lrcDiv {
margin-top : 260 px ;
}
#lrcDiv span {
display : block ;
line-height : 40 px ;
text-align : center;
color : white;
font-size : 20 px ;
}
#bgTopSpan {
position : absolute ;
display : block ;
width : 375 px ;
height : 30 px ;
top : px ;
background-image : url(../img/audio/play_top_shadow@2x.png);
}
#bgBottomSpan {
top : 430 px ;
position : absolute ;
background-image : url(../img/audio/play_bottom_shadow@2x.png);
display : block ;
width : 375 px ;
height : 30 px ;
}
#controlDiv {
width : 375 px ;
height : 180 px ;
position : relative ;
background-color : white;
}
#progressDiv {
background-color : red;
height : 1.5 px ;
width : px ;
}
#pointerImg {
width : 18 px ;
height : 18 px ;
position : absolute ;
top : -8.5 px ;
left : -3 px ;
}
#playTimeSpan {
display : block ;
position : absolute ;
font-size : 14 px ;
width : 35 px ;
top : 5 px ;
left : 5 px ;
}
#totalTimeSpan {
display : block ;
position : absolute ;
font-size : 14 px ;
width : 35 px ;
top : 5 px ;
left : 335 px ;
}
#titleSpan {
display : block ;
position : absolute ;
height : 30 px ;
width : 295 px ;
font-size : 20 px ;
text-align : center;
left : 40 px ;
top : 5 px ;
}
#buttonDiv {
margin-top : 40 px ;
position : relative ;
}
#prevImg {
width : 40 px ;
height : 40 px ;
position : absolute ;
top : 20 px ;
left : 60 px ;
}
#playOrPauseImg {
width : 70 px ;
height : 70 px ;
position : absolute ;
top : 5 px ;
left : 152 px ;
}
#nextImg {
width : 40 px ;
height : 40 px ;
position : absolute ;
top : 20 px ;
left : 275 px ;
}
最後,編寫 common.js ,程式碼如下:
$( function (){
// 歌曲列表
var playList = [ " 紅日 " , " 狼的誘惑 " , " 漂洋過海來看你 " ];
// 當前播放的歌曲序號
var currentIndex = ;
// 播放器的原生物件
var audio = $( "#song" )[ ];
// 播放時間陣列
var timeArr = [];
// 歌詞陣列
var lrcArr = [];
// 呼叫播放前設定
setup();
// 播放歌曲
playMusic();
// 播放歌曲
function playMusic (){
// 播放歌曲
audio .play();
// 設定為暫停的圖片
$( "#playOrPauseImg" ). attr ( "src" , "img/audio/pause@2x.png" );
}
// 歌曲播放前設定
function setup (){
// 設定播放哪一首歌曲
// img/audio/ 紅日 .mp3
audio .src = "img/audio/" + playList[currentIndex] + ".mp3" ;
// 設定歌曲的名字
$( "#titleSpan" ). text (playList[currentIndex]);
// 設定歌詞
setLrc();
}
// 設定歌詞
function setLrc (){
// 清空上一首的歌詞
$( "#lrcDiv span" ).remove();
// 清空陣列
timeArr = [];
lrcArr = [];
// 載入歌詞檔案
$.get( "img/audio/" + playList[currentIndex] + ".lrc" , {}, function ( data ){
if (data){
// 按行切割字串
var arr = data.split( "\n" );
// 分割歌詞
for ( var i = ; i < arr.length; i ++ ) {
// 分割時間和歌詞
var tempArr = arr[i].split( "]" );
if (tempArr.length > 1 ){
// 新增時間和歌詞到陣列
timeArr.push(tempArr[ ]);
lrcArr.push(tempArr[ 1 ]);
}
}
// 顯示歌詞
for ( var i = ; i < lrcArr.length; i ++ ) {
$( "#lrcDiv" ).append( "<span>" + lrcArr[i] + "</span>" );
}
}
});
}
// 播放暫停事件
$( "#playOrPauseImg" ).click( function (){
// 如果播放器是暫停狀態
if ( audio .paused){
// 繼續播放
playMusic();
} else {
// 暫停
audio .pause();
// 變成播放的圖片
$( "#playOrPauseImg" ). attr ( "src" , "img/audio/play@2x.png" );
}
});
// 上一首
$( "#prevImg" ).click( function (){
// 如果是第一首,那麼跳到最後一首
if (currentIndex == ){
currentIndex = playList.length - 1 ;
} else {
currentIndex -- ;
}
// 播放前設定
setup();
// 播放
playMusic();
});
// 下一首
$( "#nextImg" ).click( function (){
// 如果是最後一首,就跳到第一首
if (currentIndex == playList.length - 1 ){
currentIndex = ;
} else {
currentIndex ++ ;
}
// 播放前設定
setup();
// 播放
playMusic();
});
// 監聽播放器播放時間改變事件
audio .addEventListener( "timeupdate" , function (){
// 當前播放時間
var currentTime = audio .currentTime;
// 總時間
var totalTime = audio .duration;
// 當是數字的時候
if ( ! isNaN(totalTime)){
// 得到播放時間與總時長的比值
var rate = currentTime / totalTime;
// 設定時間顯示
// 播放時間
$( "#playTimeSpan" ). text (getFormatterDate(currentTime));
// 總時長
$( "#totalTimeSpan" ). text (getFormatterDate(totalTime));
// 設定進度條
$( "#progressDiv" ). css ( "width" , rate * 375 + "px" );
// 設定進度圓點
$( "#pointerImg" ). css ( "left" , ( 375 - 15 ) * rate - 3 + "px" );
// 設定歌詞的顏色和內容的滾動
for ( var i = ; i < timeArr.length - 1 ; i ++ ) {
if ( ! isNaN(getTime(timeArr[i]))){
// 當前播放時間大於等於 i 行的時間,並且小於下一行的時間
if (currentTime >= getTime(timeArr[i]) && currentTime < getTime(timeArr[i + 1 ])){
// 當前行歌詞變紅色
$( "#lrcDiv span:eq(" + i + ")" ). css ( "color" , "#FF0000" );
// 其他行歌詞變白色
$( "#lrcDiv span:not(:eq(" + i + "))" ). css ( "color" , "#FFFFFF" );
// 當前行歌詞滾動
$( "#lrcDiv" ).stop( false , true ).animate({ "margin-top" : 260 - 40 * i + "px" }, 1000 );
}
}
}
}
});
function getTime ( timeStr ){
// 去掉左邊的 [
var arr = timeStr.split( "[" );
if (arr.length > 1 ){
// 得到右邊的時間
var str = arr[ 1 ];
// 分割分、秒
var tempArr = str.split( ":" );
// 分
var m = parseInt(tempArr[ ]);
// 秒
var s = parseFloat(tempArr[ 1 ]);
return m * 60 + s;
}
return ;
}
// 格式化時間( 00 : 00 )
function getFormatterDate ( time ){
// 分
var m = parseInt(time / 60 );
// 秒
var s = parseInt(time % 60 );
// 補零
m = m > 9 ? m : "0" + m;
s = s > 9 ? s : "0" + s;
return m + ":" + s;
}
});
圖片和歌曲、歌詞請自行下載,最後,可以執行試試了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2646226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師分享WebService的簡單使用程式設計師Web
- 好程式設計師分享Web前端開發工具程式設計師Web前端
- 好程式設計師web前端分享js剪下板Clipboard.js 使用程式設計師Web前端JS
- 好程式設計師web前端分享如何理解JS的單執行緒程式設計師Web前端JS執行緒
- 好程式設計師web前端教程分享js reduce方法使用教程程式設計師Web前端JS
- 好程式設計師web前端培訓分享FormData 簡單介紹程式設計師Web前端ORM
- 好程式設計師web前端教程分享js閉包程式設計師Web前端JS
- 好程式設計師web前端教程分享js模板模式程式設計師Web前端JS模式
- 好程式設計師Web前端教程分享JavaScript開發技巧程式設計師Web前端JavaScript
- 好程式設計師web前端分享移動前端開發和web前端開發的區別程式設計師Web前端
- 好程式設計師分享Web前端開發就業前景如何?程式設計師Web前端就業
- 好程式設計師web前端分享用CSS和JS打造一個簡單的圖片編輯器程式設計師Web前端CSSJS
- 好程式設計師web前端教程分享JavaScript簡寫方法程式設計師Web前端JavaScript
- 好程式設計師web前端分享JS引擎的執行機制程式設計師Web前端JS
- vue..js 編寫的簡單音樂播放器VueJS播放器
- 好程式設計師前端分享HTML5 智慧表單程式設計師前端HTML
- 好程式設計師web前端教程分享JS基礎知識程式設計師Web前端JS
- 好程式設計師web前端分享js實現實戰案例程式設計師Web前端JS
- 好程式設計師Web前端分享前端CSS篇程式設計師Web前端CSS
- 好程式設計師web前端培訓分享HTML DOM簡介程式設計師Web前端HTML
- 好程式設計師web前端教程分享js中的模組化二程式設計師Web前端JS
- 好程式設計師web前端教程分享js中的模組化一程式設計師Web前端JS
- 好程式設計師web前端分享HTML表單和輸入程式設計師Web前端HTML
- 好程式設計師web前端教程分享Vue.js面試題程式設計師Web前端Vue.js面試題
- 好程式設計師前端分享HTML5 發展史程式設計師前端HTML
- 好程式設計師web前端分享web測試之Js中的變數程式設計師Web前端JS變數
- 好程式設計師HTML5大前端分享學Web前端開發有哪些要求程式設計師HTML前端Web
- 好程式設計師web前端教程分享js檔案引用編碼方式程式設計師Web前端JS
- 好程式設計師web前端教程分享CSS技巧!程式設計師Web前端CSS
- 好程式設計師web前端分享Cookie知識程式設計師Web前端Cookie
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師web前端分享前端 javascript 練習題程式設計師Web前端JavaScript
- 好程式設計師web前端培訓分享為什麼那麼多人使用vue.js程式設計師Web前端Vue.js
- 好程式設計師web培訓簡述web前端開發工具有哪些程式設計師Web前端
- 好程式設計師web前端分享應該怎樣學好web前端?程式設計師Web前端
- 好程式設計師web前端培訓分享JS面試題總結一程式設計師Web前端JS面試題
- 好程式設計師Java培訓分享-簡單的效能最佳化技巧程式設計師Java
- 好程式設計師分享Web前端知識之HTML程式設計師Web前端HTML