假如我们想要在一个页面自动播放背景音乐或是其他音频,比方ios是没办法挪用audio.play()事宜直接挪用,非得增加手动点击事宜才能够。接下来就说说我在项目里遇到的难题和解决办法.
状况1、我们晓得安卓是能够直接挪用音频的play事宜的,ios不可。如是在零丁的h5页面,无路由,这类状况就必须加个指导按钮点击它,或是在页面全局设置一个点击事宜one,当用户第一次且仅第一次遇到页面就播放。这里用vue距举例:
<template>
<view v-on:touchstart.once="playBgMusic()"></view>
</template>
methods: {
playBgMusic () {
let isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if (isiOS) this.bgMusic.play();
}
}
mounted(){
this.bgMusic = new Audio();
this.bgMusic.loop = true;
this.bgMusic.src = require('xxx.mp3');
this.bgMusic.load();
this.bgMusic.play();
}
状况2、假如是当用户运用hash或许有路由跳转的状况,能够运用在跳转页增加全局audio对象的体式格局来掌握。这里运用vue举例:起首可在router/index.js里设置window.audio=null,在跳转前的页面new一个video 并将此对象给予window.audio,然后即可鄙人一个页面运用audio对象。代码:
/*router/index.js*/
window.bgMusic=null;
/*跳转页面 router/beforeGo.js 跳转事宜*/
<view @click="goTo()">跳转到自动播放音乐的页面</view>
methods: {
goTo () {
const audio = new Audio();
audio.addEventListener('canplay', () => {audio.play()});
audio.loop = true;
audio.src = mathBgVoice;
audio.load();
bgMusic = audio;
this.$router.replace('自动播放音乐的页面路由')
}
}
状况3:假如你的营业主如果在微信上,那末能够运用以下代码,可实如今微信浏览器中iOS和安卓装备中自动播放音频的结果:
var play = function() {
document.removeEventListener("WeixinJSBridgeReady", play);
document.removeEventListener("YixinJSBridgeReady", play);
audioCtx.play();
};
document.addEventListener("WeixinJSBridgeReady",play, false);
document.addEventListener('YixinJSBridgeReady', play, false);
如许处置惩罚今后,在跳转页面先寻觅播放机遇,等跳转到播放音乐的页面即可完成‘自动播放背景音乐’的功用。