H5页面audio多声音解决方法

移动端H5带背景音乐,之后如又有其他声音声音产生的冲突,解决方法。

在线demo:http://www.hui12.com/nbin/csdn/sound/demo.html


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Audio</title>
		<script src="jquery-2.1.0.js"></script>
	</head>
	<body>
		<h2>播放暂停->背景音乐,sound1-sound3模拟页面其他音乐</h2>
		<button class="play">播放</button>
		<button class="stop">暂停</button>
		<button class="sound1">sound1</button>
		<button class="sound2">sound2</button>
		<button class="sound3">sound3</button>
		
		<script type="text/javascript">
			$(document).ready(function(){
				var $play = $('.play'),
					$stop = $('.stop'),
					$sound1 = $('.sound1'),
					$sound2 = $('.sound2'),
					$sound3 = $('.sound3');
				var sound = (function(){
					var s0 = new Audio('s0.mp3'),
						s1 = new Audio('s1.mp3'),
						s2 = new Audio('s2.mp3'),
						s3 = new Audio('s3.mp3');
					var isPlay = true;
					s0.play();
					s0.loop = true;
					function stopAll(){
						s0.pause();
						s1.pause();
						s2.pause();
						s3.pause();
					};
					return {
						play: function(){
							isPlay = true;
							stopAll();
							s0.play();
						},
						stop: function(){
							isPlay = false;
							s0.pause()
						},
						sound1: function(){
							stopAll();
							s1.play();
							s1.onended = function(){
								isPlay && s0.play();
							};
						},
						sound2: function(){
							stopAll();
							s2.play();
							s2.onended = function(){
								isPlay && s0.play();
							};
						},
						sound3: function(){
							stopAll();
							s3.play();
							s3.onended = function(){
								isPlay && s0.play();
							};
						}
					};
				})();
				$play.on('click', function(){
					sound.play();
				});
				$stop.on('click', function(){
					sound.stop();
				});
				$sound1.on('click', function(){
					sound.sound1();
				});
				$sound2.on('click', function(){
					sound.sound2();
				});
				$sound3.on('click', function(){
					sound.sound3();
				});
				/*
				 * 资源预加载
				 */
				fnLoad();
				function fnLoad(){
					var tmp = [$play, $stop, $sound1, $sound2, $sound3];
					var soundSrc = ['s0.mp3','s1.mp3','s2.mp3','s3.mp3'];
					var j = 0;
					var z = 0;
					for( var i=0; i<tmp.length; i++ ){
						tmp[i].hide();
					};
					fnLoad2();
					function fnLoad2(){
						var src = soundSrc[j];
						if( !src ) return;
						j++;
						var tmpA = new Audio(src);
						tmpA.onloadeddata = function(){
							isLoadAll();
							fnLoad2();
						};
						tmpA.onerror = function(){
							isLoadAll();
							fnLoad2();
						};
					};
					
					function isLoadAll(){
						z++;
						if( z == soundSrc.length ){
							for( var i=0; i<tmp.length; i++ ){
								tmp[i].show();
							};
						};
					};
				};
			});
		</script>
	</body>
</html>




w3c说明:
http://www.w3school.com.cn/jsref/dom_obj_audio.asp



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值