HTML5页面音频自动播放的实现方式


Posted in HTML / CSS onJune 21, 2021

最近有这么一个需求,需要在手机加载一个页面的时候,自动播放音乐资源。一般情况下,这个问题也就解决了,但是要保证各种手机上表现一致,那就相当困难了,至少要费点儿周折。 下面有三种常规的方式,可以创建自动播放的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事件,这样就算是不能自动播放,至少可以在触摸页面的可以进行播放,算是一种体验改进吧。

补充:  2015年05月31日iOS 微信 音频 视频自动播放

以上就是HTML5页面音频自动播放问题的详细内容,更多关于html5音频自动播放的资料请关注三水点靠木其它相关文章!

 
HTML / CSS 相关文章推荐
CSS3教程(2):网页边框半径和网页圆角
Apr 02 HTML / CSS
彻底弄明白CSS3的Media Queries(跨平台设计)
Jul 27 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
Dec 24 HTML / CSS
一款纯css3实现的鼠标经过按钮特效教程
Nov 09 HTML / CSS
css3实例教程 一款纯css3实现的发光屏幕旋转特效
Dec 07 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
Apr 24 HTML / CSS
CSS3实现3D翻书效果
Jun 20 HTML / CSS
css3 实现滚动条美化效果的实例代码
Jan 06 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
Aug 28 HTML / CSS
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
Jan 31 HTML / CSS
HTML5超文本标记语言的实现方法
Sep 24 HTML / CSS
CSS中float高度塌陷问题的四种解决方案
Apr 18 HTML / CSS
html中显示特殊符号(附带特殊字符对应表)
CSS中Single Div 绘图技巧的实现
CSS几步实现赛博朋克2077风格视觉效果
教你做个可爱的css滑动导航条
Html5大屏数据可视化开发的实现
关于html选择框创建占位符的问题
Jun 09 #HTML / CSS
html实现弹窗的实例
Jun 09 #HTML / CSS
You might like
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python实现图片彩色转化为素描
2019/01/15 Python
使用Python实现分别输出每个数组
2019/12/06 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
谈谈python垃圾回收机制
2020/09/27 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
韩国商务邀请函
2014/01/14 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
2015年中秋寄语
2015/07/31 职场文书
技术入股合作协议书
2016/03/21 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书