@H_404_0@需求:显示音乐播放按钮、可手动拖拽进度条;页面中含多个音乐,播放当前音乐时暂停其他音乐播放。
@H_
404_0@
小程序自带标签 au
dio
@H_
404_0@
小程序自带的au
dio标签含固定的样式,且有最小尺寸。目前项目也不含name和author字段,所以放弃au
dio标签。
@H_
404_0@实现
效果图
<p style="text-align: center">

@H_
404_0@
初始化音乐数据
<div class="jb51code">
<pre class="brush:js;">
{{currentProcess}}
{{totalProcess}}
dioListObj['q'+questionObj.id].imgUrl}}" data-audioId="q{{questionObj.id}}" bindtap="clickPlayAudio">
src: _this.data.questionObj.audio,currentProcess: '--:--',//显示 将currentProcessNum处理成时间形式展示
currentProcessNum: 0,//赋值
totalProcess: '--:--',totalProcessNum: 1,seek: -1,imgUrl: '../../images/play.png',canSlider: false //是否可以滑动,防止加载音乐时 用户滑动进度条
用户点击播放按钮太快
if (_data.clickPlayAu
dioFunctionIsRuning){
return ;
}
_this.setData({
clickPlayAu
dioFunctionIsRuning: true
})
var _obj = _this.data.au
dioListObj;
const au
dioId = $this.currentTarget.dataset.au
dioid;
var backgroundAu
dioManager = wx.getBackgroundAu
dioManager();
if (_this.data.au
dioListObj[au
dioId].imgUrl == '../../images/play.png'){
console.log('转换至播放状态')
//切换所有播放按钮为暂停状态
for (var j in _this.data.au
dioListObj) {
if (j && _this.data.au
dioListObj[j]) {
_this.data.au
dioListObj[j].imgUrl = '../../images/play.png';
}
}
_this.setData({
au
dioListObj: _this.data.au
dioListObj,})
//暂停正在播放音乐
wx.stopBackgroundAu
dio();
_obj[au
dioId].imgUrl = '../../images/paused.png';
backgroundAu
dioManager.title = '测试';
//设置音乐开始时间
if (_this.data.au
dioListObj[au
dioId].currentProcessNum != 0){
backgroundAu
dioManager.startTime = _this.data.au
dioListObj[au
dioId].currentProcessNum;
}
backgroundAu
dioManager.src = _this.data.au
dioListObj[au
dioId].src;
_obj[au
dioId].canSlider = true;
backgroundAu
dioManager.play();
// 背景音频自然播放结束事件
backgroundAu
dioManager.onEnded(function () {
var _obj = _this.data.au
dioListObj;
_obj[au
dioId].imgUrl = '../../images/play.png';
_obj[au
dioId].currentProcess = 0;
_obj[au
dioId].currentProcessNum = 0;
_this.setData({
au
dioListObj: _obj
})
})
//背景音频播放进度更新事件
backgroundAu
dioManager.onTimeUpdate(function (callback) {
_obj = _this.data.au
dioListObj;
//设置总时长
if (_obj[au
dioId] && _obj[au
dioId].totalProcess && (_obj[au
dioId].totalProcess == '--:--' || _obj[au
dioId].totalProcess == '00:00')) {
console.log(_this.formatTime(backgroundAu
dioManager.duration))
_obj[au
dioId].totalProcess = _this.formatTime(backgroundAu
dioManager.duration);
_obj[au
dioId].totalProcessNum = backgroundAu
dioManager.duration;
_this.setData({
au
dioListObj: _obj
})
}
if (!_this.data.isMovingSlider) {
//更新进度
_obj[au
dioId].currentProcess = _this.formatTime(backgroundAu
dioManager.currentTime);
_obj[au
dioId].currentProcessNum = backgroundAu
dioManager.currentTime;
_this.setData({
au
dioListObj: _obj
})
}
})
} else if (_this.data.au
dioListObj[au
dioId].imgUrl == '../../images/paused.png'){
console.log('转换至暂停状态')
_obj[au
dioId].imgUrl = '../../images/play.png'
wx.pauseBackgroundAu
dio();
backgroundAu
dioManager.pause();
}
_this.setData({
au
dioListObj: _obj,clickPlayAu
dioFunctionIsRuning: false
})