H5页面音频自动播放问题

最近有这么一个需求,需要在手机加载一个页面的时候,自动播放音乐资源。一般情况下,这个问题也就解决了,但是要保证各种手机上表现一致,那就相当困难了,至少要费点儿周折。

下面有三种常规的方式,可以创建自动播放的audio对象:

第一种:页面上创建一个audio标签,写好相关的属性,如:autoplay=‘autoplay‘,正常情况下,这里写上资源地址之后,访问页面之后就可以自动播放了。但是如果音乐资源地址不确定,需要js改变的话,就需要使用JS来实现了。

(function() {
        var audio = document.getElementById(‘myAudio1‘);
        audio1 = audio;
        audio.src = source;
        audio.loop = true;
        audio.autoplay = true;
        audio.play();
        audio.addEventListener(‘canplay‘, canPlay, false);
    })();

  

第二种:和第一种比较相似,只不过所有的标签都是JS创建之后,插入到页面上的。

(function() {
        var audio = document.createElement("AUDIO");
        audio2 = audio;
        audio.setAttribute("src", source);
        audio.setAttribute("loop", ‘true‘);
        audio.setAttribute("controls", ‘controls‘);
        audio.setAttribute("autoplay", ‘true‘);
        audio.setAttribute("id", ‘myAudio2‘);
        audio.addEventListener(‘canplay‘, canPlay, false);
        document.getElementById(‘example2‘).appendChild(audio);
        audio.play();
    })();

  

第三种:没有任何dom标签,使用JS创建一个audio对象,然后通过JS控制audio对象的各种api实现资源更换和自动播放。

(function() {
        var audio = new Audio();
        audio3 = audio;
        audio.src = source;
        audio.loop = true;
        audio.id = ‘myAudio3‘;
        audio.autoplay = true;
        audio.addEventListener(‘canplay‘, canPlay, false);
        audio.play();
    })();

  附:上述三个方法的demo

另外增加一种第三方库实现,音频资源的播放以及控制。

  整理了一些第三方库,功能不只是播放音乐,还有一些其他功能,这个自己研究。

howler.js: http://goldfirestudios.com/blog/104/howler.js-Modern-Web-Audio-Javascript-Library
buzz.js: http://buzz.jaysalvat.com/
audio.js: http://kolber.github.io/audiojs/
jPlayer.js: http://jplayer.org/

使用了上述方法之后,发现在Iphone手机(详细说明)和部分android手机仍然不能,自动播放。

他的播放条件是:必须有用户行为操作,才能进行播放。

所以就需要考虑,通过什么样的方式可以模拟用户的操作呢?网络上提供了一些方式,可以实现自动播放,如:

  • 创建一个Image对象,然后监听Image是否加载完毕,如果加载完毕,执行audio的播放,达到自动播放效果
  • 一个类似的方法, 创建一个iframe,资源直接就是音频资源的地址,iframe加载完毕就能自动播放
  • 给document或者body绑定一个touchstart事件,这样用户只要触碰到页面就可以触发播放

上述提到的前两条,我测试发现基本上没有效果。至于第三条,这个肯定是没有问题的,但是这种方式确实不完全算是自动播放,因为完全有可能用户就是不触碰页面,那么就是不会播放。但是在有些场景下,确实可以使用,这个要区分场景。

进而我想到了,能不能监听手机是否运动或者是移动,来进行播放音频呢?我监听了devicemotion(详细说明)事件,发现还是不行,此时我已经凌乱了,死的心都有了。

最后的最后,我使用了在页面上创建audio标签,使用JS调整audio相关属性和值,然后控制音频播放。

这种方式基本上,可以在不同的手机上表现出相同的效果,但是就是我测试的一个5S手机就是不行。。。同样别的5S却没有问题,具体原因到现在都没有查出来我就默默的把他忽略了。

为了能让哪些不能自动播放的提升一些体验,又绑定了一个touchstart事件,这样就算是不能自动播放,至少可以在触摸页面的可以进行播放,算是一种体验改进吧。

时间: 2024-08-09 11:36:58

H5页面音频自动播放问题的相关文章

关于音频自动播放的问题

之前工作中遇到的音频文件在移动端不能自动播放的问题,后来发现在pc端初始页面第一次加载页面的时候(注意:是没有缓冲的情况下),这个时候音频也是无法自动播放的,会在控制台输出错误:如图 翻译错误代码:Uncaught (in promise) DOMException: play()失败,因为用户没有首先与文档交互. 也就是说音频还没有被加载 **以下是看了别人文章后的个人感悟,如果有错误的地方,请各位大神指教!**如有更好的方法,欢迎留言! 问题代码: html部分 <audio src="

选择音频自动播放

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>选择音频自动播放</title></head><body><audio controls autoplay loop> <source src="music/莫斯科没有眼泪(钢琴曲).mp3" typ

解决移动端音频自动播放问题

<audio id="audio" autoplay='autoplay' loop='loop'> <source src="SeeYou.mp3" type="audio/ogg"> <source src="SeeYou.mp3" type="audio/mpeg"></audio> 在开发webapp时,有时候你可能要加点背景音乐,这时我们会用到HTM

微信h5,背景音乐自动播放

移动端默认是禁止背景音乐自动播放的,很多需求都需要在页面加载完成的情况下同时出现背景音乐. 既然是微信h5,那么wx.config肯定不陌生,废话不多,直接上代码: html: <audio src="../audio/one.mp3" id="audioPlay"></audio> js: wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来 appId: data.con

ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号

现象如下,ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法,添加如下meta标签,即可解决: <meta name="format-detection" content="telephone=no">

简单谈谈如何利用h5实现音频的播放

作者:白狼 出处:http://www.manks.top/article/h5_audio本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 如何在网页上进行音频的播放?话题挺高大上,实际上的开发工作确实非常easy,只需要利用html5的一个标签audio即可. 网页上大多数音频一般是通过插件falsh播放的.但是,并不是所有的浏览器对其都支持. html5 规定了通过audio元素来包含音频的标准方法. 当前audio支

js控制H5 audio音频的播放暂停

<body><audio src="b.mp3" controls="controls" preload id="music" hidden></audio><span onclick="control();">播放/暂停</span><span onclick="repeat();">重播</span><script

微信端 h5 视频 video 自动播放

document.addEventListener("WeixinJSBridgeReady",function(){ document.getElementById("videoID").play();},false); autoplay不能用的 感谢 https://blog.csdn.net/little_boy_9527/article/details/79628897 原文地址:https://www.cnblogs.com/zonglonglong/p/

H5中背景音乐无法自动播放问题

苹果禁止了Autoplay和JS "onload" 加载播放,使在html文件里使用了preload和autoplay属性,在移动版 Safari 上,此属性会被忽视,并且不会加载视频流,甚至不会下载该视频流. 除非用户物理点击一次屏幕,其实现在不能苹果手机,其他的安卓手机和部分App有时也存在背景音不能自动播放的问题. 背景音不能自动播放的场景及解决办法 解决方案:监听WeixinJSBridgeReady事件.DOMContentLoaded事件 微信的JS API建立在微信壳浏览