IOS自动播放音频/视频

ios 为了节省用户流量,对于 audio 和 video标签的 preload 和 autopaly 标签会自动拦截,除非用户手动点击交互才会执行 。

对于背景音乐,又必须加载的时候就要执行,解决方法:(不过注意只能在微信浏览器里面打开)

document.addEventListener("WeixinJSBridgeReady", function () {
    WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
        document.getElementById('chatAudio').play();
    });
}, false);

或(判断)

function onBridgeReady(){  
	WeixinJSBridge.invoke('getNetworkType', {}, function (e) {  
		document.getElementById('chatAudio').play();
	});  
}
if (typeof WeixinJSBridge === "undefined"){
	document.addEventListener("WeixinJSBridgeReady", onBridgeReady , false); 	
}else{
	onBridgeReady();
}

也有特别的 ios 设置后,交互事件不一定兼容

最近做了一个摇一摇功能的页面,摇一摇时触发播放摇动声音的音频,此音频播放完成后,再播放结束音频,但有一个同事的ios就是不能正常播放

以下是HTML代码

<div style="display:none;">
    <audio id="chatAudio" src="public/sound/shake.mp3"></audio>
    <audio id="chatAudio2" src="public/sound/shake_ok.mp3"></audio>
    <div class="playBtn"></div>
    <div class="playBtn2"></div>
</div>

以下是未解决播放问题的JS代码

var $myVideo = $("#chatAudio")[0];
var $myVideo2 = $("#chatAudio2")[0];

$('.playBtn').on('click',function(){
	//音频
	$myVideo.play();
});
$('.playBtn2').on('click',function(){
	//完成音频
	$myVideo2.play();
});

var myShakeEvent = new Shake({ 
	threshold:10,
	timeout:1100
});

myShakeEvent.start();
window.addEventListener('shake', shakeEventDidOccur, false);

function shakeEventDidOccur(){
	$('.playBtn').trigger('click');//开始声音
	$myVideo.addEventListener("ended", function(){
		$('.playBtn2').trigger('click');//结束声音
	}, false);
}

以下是解决播放问题的JS代码

var $myVideo = $("#chatAudio")[0];
var $myVideo2 = $("#chatAudio2")[0];
//解决IOS设置对音频的友好处理问题(判断是否iphone4则不执行,iphone4暂停后不能再播放)题
if($(window).height() > 460 && $(window).width() >= 320 && !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)){
	document.addEventListener("WeixinJSBridgeReady", function () {
		WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
			$myVideo.play();
			$myVideo.pause();
			$myVideo2.play();
			$myVideo2.pause();
		});
	}, false);
}

$('.playBtn').on('click',function(){
	//音频
	$myVideo.play();
});
$('.playBtn2').on('click',function(){
	//完成音频
	$myVideo2.play();
});

var myShakeEvent = new Shake({ 
	threshold:10,
	timeout:1100
});

myShakeEvent.start();
window.addEventListener('shake', shakeEventDidOccur, false);

function shakeEventDidOccur(){
	$('.playBtn').trigger('click');//开始声音
	$myVideo.addEventListener("ended", function(){
		$('.playBtn2').trigger('click');//结束声音
	}, false);
}

经测试,两个音频可以正常播放了

猜你喜欢

转载自blog.csdn.net/qq_16494241/article/details/50373062