我正在参加「掘金·启航计划」
前言:
最近在做一个小程序音乐播放器器,遇到 wx.createInnerAudioContext() 中 InnerAudioContext 实例 duration值 不能正常获取到值,第一次获取总是为0或者NaN,因为音乐播放器的其他功能需要由总时长 duration值 来计算才能完成,但偏偏这有毒的属性有问题。
经过网上各种搜索,找到了两种解决办法,具体如下:
1.将获取总时长duration的代码放到定时器中,延迟获取,即可在第一次中获取到,延迟的时间不宜太少,但是这个解决办法并不是最优的,经过测试偶尔还是会获取不到duration的值,伪代码如下:
let myaudio = wx.createInnerAudioContext();
myaudio.src = path; //音频地址
setTimeout(()=>{
console.log(myaudio.duration) //这里即可获取到总时长
},1000)
2.由微信API中我们可知,创建音频实例后,可以给其绑定一个监听事件—>InnerAudioContext.onTimeUpdate(function callback),该事件会监听音频播放进度更新事件,在该事件中总是可以获取到 duration 的值,也是目前我看到最好的解决获取不到duration值的办法,伪代码如下:
let myaudio = wx.createInnerAudioContext();
myaudio.onTimeUpdate(()=>{
console.log(myaudio.duration) //这里即可获取到总时长
})
因为该事件是监听播放进度的,所以会一直执行获取音频总时长的代码逻辑,担心性能问题的话,可以加一个判断让其只执行一次获取音频总时长的代码逻辑的代码。