H5音频播放标签及音频播放器代码

H5音频播放标签

audio标签是用来播放音频文件的。

支持的格式:

音频格式MINE-type
MP3audio/mpeg
Oggaudio/ogg
Wavaudio/wav

可以在 和 之间放置文本内容,这些文本信息将会被显示在那些不支持 标签的浏览器中。

1.audio对象属性:

属性描述
audioTracks返回表示可用音频轨道的 AudioTrackList 对象
autoplay设置或返回是否在加载完成后随即播放音频
buffered返回表示音频已缓冲部分的 TimeRanges 对象
controller返回表示音频当前媒体控制器的 MediaController 对象
controls设置或返回音频是否显示控件(比如播放/暂停等)
crossOrigin设置或返回音频的 CORS 设置
currentSrc回当前音频的 URL
currentTime设置或返回音频中的当前播放位置(以秒计)
defaultMuted设置或返回音频默认是否静音
defaultPlaybackRate设置或返回音频的默认播放速度
duration返回当前音频的长度(以秒计)
ended返回音频的播放是否已结束
error返回表示音频错误状态的 MediaError 对象
loop设置或返回音频是否应在结束时重新播放
mediaGroup设置或返回音频所属的组合(用于连接多个音频元素)
muted设置或返回音频是否静音
networkState返回音频的当前网络状态
paused设置或返回音频是否暂停
playbackRate设置或返回音频播放的速度
played返回表示音频已播放部分的 TimeRanges 对象
preload设置或返回音频是否应该在页面加载后进行加载
readyState返回音频当前的就绪状态
seekable返回表示音频可寻址部分的 TimeRanges 对象
seeking返回用户是否正在音频中进行查找
src设置或返回音频元素的当前来源
textTracks返回表示可用文本轨道的 TextTrackList 对象
volume设置或返回音频的音量

2.Audio 对象方法

方法描述
addTextTrack()在音频中添加一个新的文本轨道
canPlayType()检查浏览器是否可以播放指定的音频类型
fastSeek()在音频播放器中指定播放时间。
getStartDate()返回一个新的Date对象,表示当前时间轴偏移量
load()重新加载音频元素
play()开始播放音频
pause()暂停当前播放的音频

3.Audio对象事件

事件描述
abort当音频/视频的加载已放弃时触发。
canplay当浏览器可以开始播放音频/视频时触发。
canplaythrough当浏览器可在不因缓冲而停顿的情况下进行播放时触发。
durationchange当音频/视频的时长已更改时触发。
emptied当目前的播放列表为空时触发。
ended当目前的播放列表已结束时触发。
error当在音频/视频加载期间发生错误时触发。
loadeddata当浏览器已加载音频/视频的当前帧时触发。
loadedmetadata当浏览器已加载音频/视频的元数据时触发。
loadstart当浏览器开始查找音频/视频时触发。
pause当音频/视频已暂停时触发。
play当音频/视频已开始或不再暂停时触发。
playing当音频/视频在因缓冲而暂停或停止后已就绪时触发。
progress当浏览器正在下载音频/视频时触发。
ratechange当音频/视频的播放速度已更改时触发。
seeked当用户已移动/跳跃到音频/视频中的新位置时触发。
seeking当用户开始移动/跳跃到音频/视频中的新位置时触发。
stalled当浏览器尝试获取媒体数据,但数据不可用时触发。
suspend当浏览器刻意不获取媒体数据时触发。
timeupdate当目前的播放位置已更改时触发。
volumechange当音量已更改时触发。
waiting当视频由于需要缓冲下一帧而停止时触发。

4.简易音频播放器代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>音视频</title>
		<script src='../js/jquery-3.7.1.js'></script>
		<style>
			*{
				margin:0;
				padding: 0;
			}
			/* 主容器样式 */
			#box1{            
				display: flex;
				width: 600px;
				height: 500px;				
				flex-direction: column;				
			}
			/* 音频列表容器样式 */
			#audioList{
				display: flex;
				flex-direction: column;				
				width: 600px;
				height: 400px;
				
			}
			/* 音频信息容器样式 */
			#audioInfo{	
				display: flex;
				flex-direction: row;
				justify-content: space-around;
				align-items: center; 				
				width: 600px;
				height: 50px;
			}
			/* 音频控制容器样式 */
			#audioContro{
				display: flex;
				flex-direction: row;
				justify-content: center;
				align-items: center;				
				width: 600px;
				height: 50px;
			}
			/* 歌曲列表复选框样式 */
			#audioList select{
				height: 400px;
				border: 1px solid gray;
				border-radius: 2%;				
			}
			/* 进度条样式 */
			#audioSlider{
				width: 400px;
			}
			/* 图标样式 */
			img{
				width: 40px;
				height: 40px;
			}
			#audioStata{
				display: flex;
				flex-direction: column;
				font-size: 10px;
				
			}
			#voiceSlider{
				position: absolute;
				display: none;				
				height: 80px;
				left: 300px;
				top: 380px;
				background-color: red;
				/* writing-mode: bt-lr; */
				-webkit-appearance:slider-vertical;
			}
		</style>
	</head>
	<body>
		<div id='box1'>
			<!-- 歌曲列表容器 -->
			<div id='audioList'>                   
				<select id='audioSelect' multiple >        
				
				</select>
				
			</div>
			<!-- 音频播放标签 -->
			<audio id='audio1'></audio>
			<!-- 音频信息容器 -->
			<div id='audioInfo'>
				<p id='audioCurTime'>00:00:00</p>
				<input id="audioSlider" type="range" min="0" max="550" step="1" value="0" /> 
				<p id='audioTolTime'>00:00:00</p>
				<div id='audioStata'>
					<p id='voice'></p>
					<p id='isLoop'></p>					
				</div>	
			</div>
			<!-- 音频控容器 -->
			<div id='audioContro'>
				<img src='img/play.png' title='播放' onclick="play()"/>
				<img src='img/pause.png' title='暂停' onclick="pause()"/>
				<img src='img/last.png' title='上一曲' onclick='last()'/>
				<img src='img/next.png' title='下一曲' onclick='next()'/>
				<img src='img/stop.png' title='停止' onclick="stop()"/>
				<img src='img/voice.png' title='音量' onclick="voiceDisplay()"/>
				<img src='img/metu.png' title='静音' onclick="mute()"/>				
				<img src='img/loop.png' title='循环' onclick='loop()'/>
				<input id="voiceSlider" type="range" min="0" max="100" step="1" value="100" />
			</div>
		</div>
		<script>			
			var $audio=$('#audio1');         //获取音频播放对象				
			var audioList=['music/01.mp3','music/02.mp3','music/03.mp3']    //将歌曲放在一个列表中
			for (i in audioList){                                           //遍历歌曲列表,并填加到歌曲列表容器
				var $option='<option '+'value='+i+'>'+audioList[i]+'</option>'
				$('#audioSelect').append($option)
			}
			$('#audioSelect').prop('selectedIndex',0);       //歌曲列表选中第一首
			$audio.attr('src',audioList[$('#audioSelect').val()]);	  //音频标签默认选中第一首		
			$('#voice').html('音量:'+ $('#voiceSlider').val()+'%')
			$('#isLoop').html('顺序播放')
			
			$('#audioSelect').on('dblclick',function(){				  //双击歌曲列表,播放相应的歌曲
				$audio.attr('src',audioList[$('#audioSelect').val()]); 				
				play();
			})			
			
			function play(){	                                            //定义播放函数  				
				$audio.attr('src',audioList[$('#audioSelect').val()]);      //将当前选中的歌曲路径添加到播放标签
				$audio[0].load()                                            //载入歌曲
				$audio[0].oncanplay=function(){
					$('#audioSlider').attr('max',$audio[0].duration);	    //获取歌曲时长				
					$('#audioTolTime').html(getTime($audio[0].duration));	//在信息显示容器显示歌曲时长		
				}
				$audio[0].play();     //播放放歌曲				
			}
			function pause(){	      //定义暂停函数			
				$audio[0].pause()
			}
			function stop(){		   //定义停止函数	,将暂停,再将当前播放时间设为0	
				$audio[0].pause()
				$audio[0].currentTime=0    
			}
			function mute(){           //定义静音函数,如果当前不是静音,则调为静音,反之调为非静音
				console.log('metu')
				if ($audio[0].muted){
					$audio[0].muted=false;
				}
				else{
					$audio[0].muted=true;
					$('#voiceSlider').val(0)
					$('#voice').html('音量:'+$('#voiceSlider').val()+'%')
				}
			}
			
			function loop(){          //定义循环函数,如果当前不是循环,则调为循环,反之调为连续播放
				if ($audio[0].loop){
					$audio[0].loop=false;
					$('#stata').attr('src','img/continuous.png');					
					$('#isLoop').html('顺序播放');
				}
				else{
					$audio[0].loop=true;
					$('#stata').attr('src','img/loop.png');				
					$('#isLoop').html('单曲循环');
				}			
			}		
			
			function last(){         //定义播放上一曲函数,将播放列表index-1后播放
				if($('#audioSelect')[0].selectedIndex!=0){
					$('#audioSelect')[0].selectedIndex--;
					play()
				}				
			}
			function next(){         //定义播放下一曲函数,将播放列表index+1后播放
				if($('#audioSelect')[0].selectedIndex+1<$('#audioSelect')[0].length){
					$('#audioSelect')[0].selectedIndex++;
					play()
				}				
			}
			
			function voiceDisplay(){       //显示音量调节滑块  
				$('#voiceSlider').css('display','block')
			}
			
			$('#audioSlider').on('input',function(){      //给进度条添加事件,当拉动进度条时,相应调整歌曲的播放位置
				$audio[0].currentTime=$('#audioSlider').val()
			})
			$audio.on('ended',function(){                 //给音频标签添加事件,当歌曲播放完后,自动播放下一曲
				if($('#audioSelect')[0].selectedIndex+1<$('#audioSelect')[0].length){
					$('#audioSelect')[0].selectedIndex++;
					play()
				}
				else{
					console.log('end')
				}
			})
			
			$('#voiceSlider').on('mouseout',function(){   //当鼠标移出时,隐藏音量调节滑块
				$('#voiceSlider').css('display','none')
			})
			
			$('#voiceSlider').on('input',function(){      //拖动音量调节滑块时调节音频音量
				if ($('#voiceSlider').val()){
					$audio[0].muted=false;
				}
				else{
					$audio[0].muted=true;
					
				}
				$('#voice').html('音量:'+ $('#voiceSlider').val()+'%')
				$audio[0].volume=$('#voiceSlider').val()/100;
			})
			
			
			var audioTimer=setInterval(function(){       //定时器,用于动态显示播放时间和拉动进度条
				sec=parseInt($audio[0].currentTime);
				$('#audioCurTime').html(getTime(sec));
				$('#audioSlider')[0].value=sec;
				
			},1000)
						
			
			function getTime(sec){                       //将秒数转换为00:00:00这样的时间格式
				var h=parseInt(sec/3600).toString().padStart(2,'0')
				var m=parseInt((sec-h*3600)/60).toString().padStart(2,'0')
				var s=parseInt(sec-h*3600-m*60).toString().padStart(2,'0')
				var time=h+':'+m+':'+s
				return time
			}
			
		</script>
	</body>
</html>
  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值