移动端手机浏览器不支持audio标签音乐自动播放的解决方案
用HTML5的audio标签在页面中引入音频文件非常方便,如果我们想让音乐自动播放,只需给audio标签加一个autoplay属性就行了。比如这样写:
<audio src="music.mp3" autoplay></audio>
当然,audio标签还有其他一些属性,简单了解一下:
- autoplay: 自动播放
- preload: 预加载
- controls: 显示播放控制台
- loop: 引入的音频文件默认只播放一次,loop属性可以指定循环播放次数,如果不指定具体次数,则视为一直循环播放
但是设置了自动播放的音乐后,pc端浏览器一切正常,但是手机移动端浏览器(比如UC浏览器、腾讯浏览器、360浏览器、夸克浏览器等)无法实现自动播放的效果。这是因为几乎所有移动端浏览器,为了所谓的"用户体验",都默认禁掉了audio标签的autoplay自动播放属性,必须通过用户的手动触发才可以实现播放的效果。
但是,真机实测中还是遇到了不少坑,特将经验总结如下:
解决思路是这样,给document添加一个点击(触摸)事件,在该事件中执行audio元素对象的play()方法即可。
不废话,写了个demo,直接上代码,本demo实测兼容Android和IOS系统,有问题欢迎在本文下留言交流。
对了,还要格外强调一下,演示代码中给document添加的是touchend事件,经实测touchend和click事件可以,但是touchstart事件无效,一定不要用touchstart!一定不要用touchstart!一定不要用touchstart!老孙在这里卡了好久,一开始一直用touchstart,各种属性各种控制,都不行,最后鬼使神差写了个touchend,意外得到了结果,才有了本文。别问为啥,不信邪的自己去测。
在线演示地址: http://www.sunqizheng.com/wp-content/uploads/2018/07/audioautoplay/
可以用手机扫描下方二维码直接打开演示地址:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>移动端音乐自动播放效果</title>
</head>
<body>
<audio src="zhubajie.mp3" id="audio" autoplay loop></audio>
<script type="text/javascript">
var audio = document.getElementById("audio");
document.ontouchend = function() {
audio.play()
}
</script>
请用手机打开本页面
<br />
在页面任意位置点击一下
<br />
就能听到音乐响起了!
<br />
by 孙琪峥 www.sunqizheng.com
<style type="text/css">
*{
padding: 0;
margin: 0;
}
body,html{
width: 100%;
height: 100%;
}
body{
display: flex;
justify-content: center;
align-items: center;
font-size: 5vw;
text-align: center;
line-height: 1.5em;
}
</style>
</body>
</html>
