前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种解决h5页面背景音乐不能自动播放的方案

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

作者头像
用户1217459
发布2018-01-31 14:13:38
3.5K0
发布2018-01-31 14:13:38
举报
文章被收录于专栏:Young DreamerYoung Dreamer
  • 场景:微信、浏览器、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();     } }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档