Javascript 入门级 编写简单的音乐播放器

这是一篇关于播放器简单制作的博客。使用于入门级的朋友。功能主要实现了列表点击播放、播放及暂停、上下曲的切换及进图条和时间显示。

一、介绍

开发语言:Javascript
开发工具:Hbuilder
开发日期:2019-09-22
作者:CodingmanNAN

网页入口:procoding.com.cn/Demo/Music/demo1.htm
在这里插入图片描述
播放器由播放列表、暂停播放、进度条、歌手专辑图片文本及歌词组成。

二、代码实现

代码方面js部分注释详细,极易理解~

(1)HTML部分
<body>
	<div class="mod_player">
   		<!-- 播放器组件 -->
	  	<div class="player__hd">
	    	<audio id="Music" src="Audio/周传雄 - 寂寞沙洲冷.mp3" loop="loop"></audio>
	   	</div>
    		<!-- 上半部左侧 -->
    		<div class="player_style_normal js_box js_full_box" style="display: block>    
	        	<ul class="songlist__header">
	         		<li class="songlist__header_name">歌曲</li>
	        		<li class="songlist__header_author">歌手</li>
	         		<li class="songlist__header_time">时长</li>
	        	</ul>
       			<i class="player_songlist__line"></i>
       		</div>
        	<!-- 寂寞沙洲冷 -->
        	<ul class="songlist__list" id="song_box">
         		<li mid="1334012" ix="0" data-page="player">
         			<div class="songlist__number">1</div>
           			<div class="songlist__songname">
            				<span class="songlist__songname_txt" title="寂寞沙洲冷">寂寞沙洲冷</span>
            				<div class="mod_list_menu">
	             				<a href="javascript:;" class="list_menu__item list_menu__play js_play" title="播放">
	              				<i class="list_menu__icon_play" οnclick="listGetMusic(0)"></i>
	              				<span class="icon_txt">播放</span></a>
 		 			</div>
           			</div>
           			<div class="songlist__artist" title="周传雄">
           	 			<a href="#" title="周传雄" class="singer_name">周传雄</a>
           			</div>
	           		<div class="songlist__time">04:34</div>
	           		<div class="songlist__other"></div>
	           		<a href="javascript:;" class="songlist__delete js_delete" title="删除">
	            		<span class="icon_txt">删除</span></a>
	           		<i class="player_songlist__line"></i>
		         </li>
	        </ul>
        </div>
        <div class="scroll_bar_cont sb_thumb_cont" style="height: 225px;"></div>
 	<!-- 上半部右侧 -->
   	<div class="mod_song_info" id="song_info">
	    	<div class="song_info__info">
		     	<a href="javascirpt:;" class="song_info__cover js_album">
		      		<img src="playerimg/20150718201920673262.jpg" id="song_pic" alt="" class="song_info__pic">
	      		</a>
		     	<div class="song_info__name" id="song_name">歌曲名:
		      	<a href="#" title="寂寞沙洲冷" class="js_song">寂寞沙洲冷</a>
		     	</div>
		     	<div class="song_info__singer" id="singer_name">歌手名:
		      		<a href="#" title="周传雄" class="js_singer">周传雄</a>
		     	</div>
		     	<div class="song_info__album" id="album_name">专辑名:
		      		<a href="#" title="星空下的传说" target="_blank">星空下的传说</a>
		     	</div>
		</div>
		<div class="song_info__lyric">歌词部分</div>
   	</div>
  	<!-- 尾部按钮及主要功能建 -->
  	<div class="player__ft" id="opbanner">
   		<a href="javascript:;" class="btn_big_prev" title="alt+←" οnclick="getMusicPrev()">
    			<span class="icon_txt">上一首</span>
   		</a>
   		<a href="javascript:;" class="btn_big_play" id="btnplay" title="[空格]" οnclick="getMusicPlay()">
    			<span class="icon_txt">播放</span>
   		</a>
   		<a href="javascript:;" class="btn_big_next" title="alt+→" οnclick="getMusicNext()">
    			<span class="icon_txt">下一首</span>
   		</a>
	   	<div class="player_music">
	    		<div class="player_music__info" id="sim_song_info">
	     			<a href="#" title="寂寞沙洲冷" class="js_song_btn">寂寞沙洲冷</a> -
	     			<a href="#" title="周传雄" class="js_singer_btn">周传雄</a>
	    		</div>
		    	<div class="player_music__time" id="time_show">00:00 / 04:34</div>
		    	<div class="player_progress" id="progress">
		     	<div class="player_progress__inner" id="spanplayer_bgbar">
		      	<!-- 加载条 -->
		      	<div class="player_progress__load" id="downloadbar"></div>
		      	<!-- 进度条原点 -->
		      	<div class="player_progress__play" style="width: 0%;" id="spanplaybar">
				<i class="player_progress__dot" id="spanprogress_op"></i>
	      		</div>
      		</div>
    	 </div>
	</div>
</body>
(2)Javascript 部分
var music = document.getElementById("Music");
/* 开始or暂停 按钮 */
var btnplay = document.getElementById("btnplay");
/* 获取MP3地址 */
var audio = document.querySelector("audio");
/* 获取背景图片 */
var bodyBg = document.querySelector(".bgColor");
/* 获取专辑Logo */
var songerLogo = document.getElementById("song_pic");
/* 获取歌曲名 */
var songName = document.querySelector(".song_info__name a");
var btnSongname = document.querySelector(".player_music__info .js_song_btn");
/* 获取歌手名 */
var singer = document.querySelector(".song_info__singer a");
var btnSinger = document.querySelector(".player_music__info .js_singer_btn");
/* 获取专辑名 */
var album = document.querySelector(".song_info__album a");
/* 播放or暂停 */
var btnplay = document.getElementById("btnplay");
/* 获取时长 */
var timer = document.getElementById("time_show");
/* 进度条 */
var bgbar = document.getElementById("spanplayer_bgbar");
/* 进度条原点 */
var playbar = document.getElementById("spanplaybar");
/* 列表点击歌曲字体#31C27C显示 */
var item = document.querySelectorAll(".songlist__list");
var item_name = document.querySelectorAll(".singer_name");
/* MP3地址 */
var musicArr = ["Audio/周传雄%20-%20寂寞沙洲冷.mp3", "Audio/周传雄%20-%20黄昏%20(Live).mp3", "Audio/周传雄%20-%20青花.mp3", "Audio/周传雄%20-%20弱水三千.mp3", "Audio/周传雄%20-%20冬天的秘密.mp3", "Audio/Jam%20-%20七月上.mp3", "Audio/张国荣%20-%20当年情%20(Live).mp3", "Audio/张国荣%20-%20千千阕歌%20(Live).mp3", "Audio/李健%20-%20贝加尔湖畔.mp3","Audio/张国荣%20-%20倩女幽魂%20(粤语).mp3"];
/* 歌曲名 */
var musicName = ["寂寞沙洲冷", "黄昏", "青花", "弱水三千", "冬天的秘密", "七月上", "当年情", "千千阙歌", "贝加尔湖畔", "倩女幽魂"];
/* 歌手名 */
var musicSongername = ["周传雄", "周传雄", "周传雄", "周传雄", "周传雄", "Jam", "张国荣", "张国荣", "李健", "张国荣", ];
/* 专辑名 */
var musicAlbum = ["星空下的传说", "忘记", "蓝色土耳其", "蓝色土耳其", "恋人创世纪", "Jam", "张国荣", "Miss You Much, Leslie", "依然", "Summer Romance", ];
/* 背景图片 */
var musicBgimg = ["playerimg/Zhoubgcolor1.png", "playerimg/Zhoubgcolor2.png", "playerimg/Li3.png", "playerimg/Li4.png", "playerimg/Li6.png", "playerimg/Qi.png", "playerimg/Zhangbgcolor5.png", "playerimg/Zhangbgcolor4.png", "playerimg/Li2.png", "playerimg/Zhangbgcolor5.png",];
/* 专辑Logo */
var musicSongerLogo = ["playerimg/20150718201920673262.jpg", "playerimg/20150718234857939637.jpg", "playerimg/20150720140656624193.jpg", "playerimg/20150718234857939637.jpg", "playerimg/20160909014901117286.jpg", "playerimg/QiLogo2.jpg", "playerimg/zhang.jpg", "playerimg/zhangLogo2.jpg", "playerimg/liLogo1.jpg", "playerimg/zhangLogo1.jpg"];
var now = 0;
/* getMain() 封装公用事件调用函数 */
function getMain(x){
 /* 歌曲地址 */
 audio.src = this.musicArr[x];
 /* 背景图 */
 bodyBg.style.backgroundImage = "url("+musicBgimg[x]+")";
 /* 歌手Logo */
 songerLogo.src = this.musicSongerLogo[x];
 /* 歌曲名 */
 songName.innerHTML = musicName[x];
 songName.title = musicName[x];
 btnSongname.innerHTML = musicName[x];
 btnSongname.title = musicName[x]; 
 /* 歌手名 */
 singer.innerHTML = musicSongername[x];
 singer.title = musicSongername[x];
 btnSinger.innerHTML = musicSongername[x];
 btnSinger.title = musicSongername[x];
 /* 专辑名*/
 album.innerHTML = musicAlbum[x];
 album.title = musicAlbum[x];
 /* 列表点击显示选中的歌曲目标 */
 for(var i = 0; i <= item.length-1; i++){
  item[i].style.color = "rgba(225,225,225,.8)";
  item_name[i].style.color = "rgba(225,225,225,.8)";
 }
 item[now].style.color = "#31C27C" ;
 item_name[now].style.color = "#31c27c";
 /* 播放 */
 audio.play();
}
/* 列表点击播放 */
function listGetMusic(x){
 getMain(x); 
 btnplay.className = "btn_big_play btn_big_play--pause";  // 显示暂停图标
}
/********** 全部播放 ***********/
function getMusicPlay() {
 console.log(audio.paused)
 if(audio.paused){
  btnplay.className = "btn_big_play btn_big_play--pause";
  item[0].style.color = "#31C27C" ;
  item_name[0].style.color = "#31c27c";
  audio.play();
 }else{
  console.dir(btnplay); // 显示点击事件后btnplay更改详情。
  btnplay.className = "btn_big_play";
  audio.pause();
 }
}
/********** 上一首 ***********/
function getMusicPrev(){
 if(now <= 0){
  now = musicArr.length;
 }
 now--;
 getMain(now);
}
/********** 下一首 ***********/
function getMusicNext(){
 now++;
 if(now > musicArr.length-1){
  now = 0;
  getMain(now);
 }
 getMain(now);
}
audio.ontimeupdate = function(){
 var pre = audio.currentTime / audio.duration * 200; // 显示当前播放秒数 
 var wid = pre / audio.duration * 100 ; // 显示当前秒数所占歌曲长度的百分比
 var preWid = wid.toFixed(3);   // 保留 wid 小数点后三位小数
 console.log(preWid + "%");    // 显示当前秒数所占歌曲长度的百分比
 playbar.style.width = preWid + "%";  // 进度条原当前点位置 ,以百分比形式表示
 timer.innerHTML = Timer(audio.currentTime) + "/" + Timer(audio.duration);  // 时长进度显示
}
/* 总时长换分秒 */
function Timer(timeNumber){
 var min = parseInt(timeNumber / 60 );
 var sec = parseInt(timeNumber % 60);
 min = min >= 10 ? min : "0" + min;
 sec = sec >= 10 ? sec : "0" + sec;
 return min + ":" + sec;
}

JS部分的功能实现主要以依赖于数组存储相应数据,再通过获取各相应元素节点改变元素属性。
其中进度条的该表依赖于ontimeupdate 事件与currentTime的配合使用。
* ontimeupdate监听事件
* ontimeupdate 事件在视频/音频(audio/video)当前的播放位置发送改变时触发.
* · 播放视频/音频(audio/video)
* · 重新定位视频/音频(audio/video)的播放位置。
* 注 :ontimeuodate事件与currentTime一起使用,可返回video/audio的当前播放位置 !

三、总结

播放器的页面实现基本通过HTML+CSS即可实现,播放器的具体操作所涉及的Javascript知识主要为js的入门级操作,了解相应的循环判断、条件判断、函数封装、基本事件、DOM操作等功能的使用即可大致实现主要的功能。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript简易音乐播放器是一个使用JavaScript编写简单程序,它允许用户在网页上播放音频文件。这样的工具通常包含以下几个核心功能: 1. 音频元素控制:创建一个HTML5 `<audio>` 元素,并使用JavaScript API(如`src`属性设置音频源,`play()`、`pause()`、`stop()`控制播放/暂停/停止)来控制播放。 2. 播放/暂停按钮:提供用户交互界面,点击后触发播放或暂停操作。 3. 播放进度条:显示当前播放进度,用户可以通过拖动或点击进度条调整播放位置。 4. 播放列表管理:支持添加、删除和切换歌曲。 5. 音乐循环:可以选择单曲循环或列表循环播放。 6. 事件监听:当音频播放完成或错误发生时,会触发相应的回调函数。 下面是一个非常基础的简易音乐播放器的示例代码片段: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>简易音乐播放器</title> <style> .audio-player { width: 300px; } </style> </head> <body> <audio id="myAudio" src="song.mp3"></audio> <button onclick="playMusic()">播放</button> <button onclick="pauseMusic()">暂停</button> <progress value="0" max="100" id="progressBar"></progress> <script> var audio = document.getElementById('myAudio'); var progressBar = document.getElementById('progressBar'); function playMusic() { audio.play(); } function pauseMusic() { audio.pause(); } audio.addEventListener('timeupdate', function() { var progress = (audio.currentTime / audio.duration) * 100; progressBar.value = progress; }); </script> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值