【前端】手机端网页自动播放背景音乐相关资料

做手机端活动页面的时候,经常会遇到打开页面自动播放背景音乐的需求。但是很多开发人员在实现这个需求时会遇到各种各样不能自动播放或有些场景可以有些场景不行的现象,现在总结一下手机端自动播放背景音乐的资料。

程序媛镇楼
1

首先从正常的代码开始:

<audio autoplay  src="url.mp3"></audio>

【andriod】
支持场景:
QQ浏览器
QQ(QQ内置了QQ浏览器,当然能打开)
微信(都是腾讯的,难道内核一样?)
系统自带浏览器

不支持场景:
chrome

【ios】
支持场景:

不支持场景:
safari

然后是改进的代码开始:
方案1:用video的append,然而并没什么卵用

<div id="bgmvideo">
</div>

<script type="text/javascript"> 
$(document).ready(function () {  
            if (!sessionStorage.getItem("bgm")) {  
                 $("#bgmvideo").append(  
                    '<audio src="url.mp3" autoplay hidden></audio>'  
                );  
                sessionStorage.setItem("bgm", 1)  
            }  
        })  
</script>

方案2:针对大部分IOS系统和少部分不支持自动播放的Android微信
监听WeixinJSBridgeReady事件、DOMContentLoaded事件
微信的JS API建立在微信壳浏览器的内置JS对象WeixinJSBridge上,WeixinJSBridge并不是WebView一打开就有了,客户端需要初始化这个对象,当这个对象准备好的时候,客户端会抛出事件"WeixinJSBridgeReady"。
发现部分机型,监听DOMContentLoaded和load事件,在回调中也可以播放音乐;
所以,为了保险起见,可以同时监听两个事件,以增强其适用性。
代码如下:

<audio style="display:none; height: 0" id="bg-music" preload="auto" src="url.mp3" loop="loop"></audio>
document.addEventListener('DOMContentLoaded', function () {
    function audioAutoPlay() {
        var audio = document.getElementById('bg-music');
            audio.play();
        document.addEventListener("WeixinJSBridgeReady", function () {
            audio.play();
        }, false);
    }
    audioAutoPlay();
});

方案3:触屏播放,等同于按了播放按钮

$('html').one('touchstart',function(){ 
audio.play(); 
}
});

("body").one("touchstart",
audio.play(); 
});

优点:兼容所有场景。
缺点:不是真正的自动播放,用户不触屏就不会播放。且为避免重复播放,应再改进为在新建全屏透明层上触发事件,触发后同时关闭该层。
备注:此代码测试未通过。

方案4:一个自信满满的方案,然而测试后,各种场景都无效,还不如默认的……
http://blog.csdn.net/sinat_33750162/article/details/54630112

其他参考:
部分App不支持webview音乐自动播放
  解决方案:1.壳浏览器支持;2.通过手势事件播放音乐

  完整代码:

// 音乐播放
function autoPlayMusic() {
    // 自动播放音乐效果,解决浏览器或者APP自动播放问题
    function musicInBrowserHandler() {
        musicPlay(true);
        document.body.removeEventListener('touchstart', musicInBrowserHandler);
    }
    document.body.addEventListener('touchstart', musicInBrowserHandler);

    // 自动播放音乐效果,解决微信自动播放问题
    function musicInWeixinHandler() {
        musicPlay(true);
        document.addEventListener("WeixinJSBridgeReady", function () {
            musicPlay(true);
        }, false);
        document.removeEventListener('DOMContentLoaded', musicInWeixinHandler);
    }
    document.addEventListener('DOMContentLoaded', musicInWeixinHandler);
}
function musicPlay(isPlay) {
    var media = document.querySelector('#bg-music');
    if (isPlay && media.paused) {
        media.play();
    }
    if (!isPlay && !media.paused) {
        media.pause();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值