众所周知,audio在ios上不能自动播放是一个普遍性问题,当我们想实现自动播放时,直接调用oncanplay是没有效果的(PC端和Android设备会正常播放),在此给出以下解决方法:
通过手动的形式触发(不推荐)
当我们的播放页面是从其他页面进来的话,可以在上一个页面的点击事件里手动触发播放,或者在进入该页面以后给一个弹出框,通过手动点击去触发播放。
项目运行于微信上时借助WeixinJSBridgeReady实现(微信上使用)
- 首先加载微信JS-SDK
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
- 然后通过该SDK页面注入配置信息,微信JS-SDK传送门。
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
- 最后监听WeixinJSBridgeReady时调用paly()播放方法
wx.ready(function() {
let audio = this.$refs.audio;
audio.play();
document.addEventListener("WeixinJSBridgeReady", function() {
audio.play();
},
false
);
});
通过ondurationchange事件来监听(推荐)
ondurationchange:事件在视频/音频(audio/video)的时长发生变化时触发。在该事件触发以后,调用paly()播放。详情以及其他事件对象查看传送门
watch: {
// currentSong 指当前播放的歌曲
currentSong () {
this.$refs.audio.ondurationchange = () => {
this.totalTime = this.$refs.audio.duration
if (this.isPlaying) {
this.$refs.audio.play()
} else {
this.$refs.audio.pause()
}
}
},
}
若有其他方法,欢迎交流