【转】一种解决h5页面背景音乐不能自动播放的方案

原文:http://www.cnblogs.com/wmhuang/p/5452259.html

----------------------------------------------------------------------------------------------

  • 场景:微信、浏览器、App
  • 普通解决方案:采用audio标签的autoplay属性
  • 现象:
  1. 大部分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="../static/videos/bg-music.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();
});

  1. 部分Android浏览器和所有IOS下Safari浏览器不支持自动播放

  解决方案:通过手势事件播放音乐

  (1) 监听body的touchstart事件,回调中播放音乐;

  缺点:部分元素的touch事件可能会阻止冒泡,需要在对应的地方调起播放音乐函数

  (2) 可以增加透明层,点击到透明层,播放音乐,关闭透明层;

  缺点:第一次点击按钮元素可能不响应,造成用户体验上的伤害。

  1. 部分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();
    }
}

  • 场景:微信、浏览器、App
  • 普通解决方案:采用audio标签的autoplay属性
  • 现象:
  1. 大部分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="../static/videos/bg-music.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();
});

  1. 部分Android浏览器和所有IOS下Safari浏览器不支持自动播放

  解决方案:通过手势事件播放音乐

  (1) 监听body的touchstart事件,回调中播放音乐;

  缺点:部分元素的touch事件可能会阻止冒泡,需要在对应的地方调起播放音乐函数

  (2) 可以增加透明层,点击到透明层,播放音乐,关闭透明层;

  缺点:第一次点击按钮元素可能不响应,造成用户体验上的伤害。

  1. 部分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();
    }
}

时间: 2024-08-05 23:14:11

【转】一种解决h5页面背景音乐不能自动播放的方案的相关文章

一种解决h5页面背景音乐不能自动播放的方案

场景:微信.浏览器.App 普通解决方案:采用audio标签的autoplay属性 现象: 大部分IOS系统和少部分Android微信不支持自动播放 $解决方案:监听WeixinJSBridgeReady事件.DOMContentLoaded事件 微信的JS API建立在微信壳浏览器的内置JS对象WeixinJSBridge上,WeixinJSBridge并不是WebView一打开就有了,客户端需要初始化这个对象,当这个对象准备好的时候,客户端会抛出事件"WeixinJSBridgeReady&

解决h5页面背景音乐不能自动播放的方案

场景:微信.浏览器.App 普通解决方案:采用audio标签的autoplay属性 现象: 大部分IOS系统和少部分Android微信不支持自动播放 $解决方案:监听WeixinJSBridgeReady事件.DOMContentLoaded事件 微信的JS API建立在微信壳浏览器的内置JS对象WeixinJSBridge上,WeixinJSBridge并不是WebView一打开就有了,客户端需要初始化这个对象,当这个对象准备好的时候,客户端会抛出事件"WeixinJSBridgeReady&

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

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

解决ios下的微信打开的页面背景音乐无法自动播放

后面的项目发现,还有两个坑,需要注意下: ·本文的解决方案的核心是利用了 微信/易信 在ready的时候会有个 WeixinJSBridgeReady/YixinJSBridgeReady事件,通过监听这个事件来触发的.那有个坑就是 如果微信已经ready了,但还没执行到你监听这个ready事件的代码,那么你的监听是没用的,所以最理想的情况是,监听的js放在head前面(放在css外链之前),确保最新执行,切记!切记!. ·另一个坑就是,本文的解决方案只适合一开始就播放的背景音乐.如果你是做那种

H5页面背景音乐,C33自转效果(原创)

我们经常在访问H5页面(比如电子贺卡.动态音乐相册等)的时候,会看到右上角有个自转的音乐图标,点击可以控制音乐是否播放,那这个效果是如何实现的呢?  Demo HTML代码如下: 1 <div id="audio_btn" class="rotate"> 2 <audio loop src="bg_audio.mp3" id="media" autoplay="" preload=&quo

H5页面背景音乐,C33 360&#176;旋转效果

在做H5页面的时候,经常会需要用到背景音乐,比如电子贺卡.动态音乐相册等,右上角有个360°旋转的音乐图标,点击可以控制音乐是否播放,那这个效果是如何实现的呢? 我现整理了一下代码:  Demo 点击Icon暂停,再次点击继续. HTML代码如下: 1 <div id="audio_btn" class="rotate"> 2 <audio loop src="bg_audio.mp3" id="media"

移动端H5页面高清多屏适配方案

背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点: 1)首先,选取一款手机的屏幕宽高作为基准(以前是iPhone4的320×480,现在更多的是iphone6的375×667). 2)对于retina屏幕(如: dpr=2),为了达到高清效果,视觉稿的画布大小会是基准的2倍,也就是说像素点个数是原来的4倍(对iphone6而言:

解决手机微信浏览器视频自动播放和默认全屏问题

1.早期因为带宽和流量的因素,移动端浏览器禁止视频自动播放,现在现在流量便宜了.手机硬件越来越好了,部分可支持了2.在移动端浏览器, video 在用户点击播放或者通过API video.play() 触发播放时,会强制以全屏置顶的形式进行播放,设计的初衷可能是因为全屏能提供更好的用户体验 <video controls="controls" src="" id="ckplayer_a1" x5-video-player-type=&quo

h5中嵌入视频自动播放的问题

在H5页面中嵌入视频的情况是比较多件的,有时候会碰到需要自动播放的情况,之前根本觉得这不是问题,但是自己的项目中需要视频的时候就有点sb了,达不到老板的要求,那个急呀~~~ 好在之前看过公司前辈的项目,正好用到了视频,并且可以自动播放,爽!!! 赶紧copy过来,记录一下.这里主要监听了canplaythrough事件,然后自己去让视频play(),在这个过程中还发现,ios和安卓不一样,安卓上需要设置muted才能自动播放,ios没这个限制,还有就是有时候视频也可能有问题,导致不能自动播放,之