|
|
// index.js
|
|
|
|
|
|
// 格式化时间
|
|
|
function formatTime(time) {
|
|
|
var minute = Math.floor(time / 60) % 60;
|
|
|
var second = Math.floor(time) % 60
|
|
|
return (minute < 10 ? '0' + minute : minute) + ':' + (second < 10 ? '0' + second : second)
|
|
|
}
|
|
|
|
|
|
Page({
|
|
|
data: {
|
|
|
item: 0,
|
|
|
tab: 0,
|
|
|
// 播放列表数组playlist
|
|
|
playlist: [{
|
|
|
id: 1,
|
|
|
title: '祝你生日快乐',
|
|
|
singer: '小丽',
|
|
|
src: 'http://127.0.0.1:3000/1.mp3',
|
|
|
coverImgUrl: '/images/cover.jpg'
|
|
|
}, {
|
|
|
id: 2,
|
|
|
title: '劳动最光荣',
|
|
|
singer: '小朋',
|
|
|
src: 'http://127.0.0.1:3000/2.mp3',
|
|
|
coverImgUrl: '/images/cover.jpg'
|
|
|
}, {
|
|
|
id: 3,
|
|
|
title: '龙的传人',
|
|
|
singer: '小华',
|
|
|
src: 'http://127.0.0.1:3000/3.mp3',
|
|
|
coverImgUrl: '/images/cover.jpg'
|
|
|
}, {
|
|
|
id: 4,
|
|
|
title: '小星星',
|
|
|
singer: '小红',
|
|
|
src: 'http://127.0.0.1:3000/4.mp3',
|
|
|
coverImgUrl: '/images/cover.jpg'
|
|
|
}],
|
|
|
state: 'running',
|
|
|
playIndex: 0,
|
|
|
play: {
|
|
|
currentTime: '00:00',
|
|
|
duration: '00:00',
|
|
|
percent: 0,
|
|
|
title: '',
|
|
|
singer: '',
|
|
|
coverImgUrl: '/images/cover.jpg',
|
|
|
}
|
|
|
},
|
|
|
// 在页面初次渲染时,自动选择播放列表中的第1个曲目
|
|
|
audioBam: null,
|
|
|
sliderChangeLock: false,
|
|
|
onReady: function () {
|
|
|
this.audioBam = wx.getBackgroundAudioManager()
|
|
|
// 默认选择第1曲
|
|
|
this.setMusic(0)
|
|
|
// 播放失败检测
|
|
|
this.audioBam.onError(() => {
|
|
|
console.log('播放失败:' + this.audioBam.src)
|
|
|
})
|
|
|
// 播放完成自动换下一曲,监听音频自然播放结束的事件
|
|
|
this.audioBam.onEnded(() => {
|
|
|
this.next()
|
|
|
})
|
|
|
// 监听音频播放进度更新事件,获取音乐状态信息
|
|
|
var updateTime = 0 // 上次更新的时间
|
|
|
this.audioBam.onTimeUpdate(() => {
|
|
|
var currentTime = parseInt(this.audioBam.currentTime)
|
|
|
if (!this.sliderChangeLock && currentTime !== updateTime) { // // 将更新频率限制在1秒1次
|
|
|
updateTime = currentTime
|
|
|
this.setData({
|
|
|
'play.duration': formatTime(this.audioBam.duration || 0),
|
|
|
'play.currentTime': formatTime(currentTime),
|
|
|
'play.percent': currentTime / this.audioBam.duration * 100
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
sliderChange: function (e) {
|
|
|
var second = e.detail.value * this.audioBam.duration / 100
|
|
|
this.audioBam.seek(second)
|
|
|
setTimeout(() => {
|
|
|
this.sliderChangeLock = false
|
|
|
}, 1000)
|
|
|
},
|
|
|
sliderChanging: function (e) {
|
|
|
var second = e.detail.value * this.audioBam.duration / 100
|
|
|
this.sliderChangeLock = true
|
|
|
this.setData({
|
|
|
'play.currentTime': formatTime(second),
|
|
|
})
|
|
|
},
|
|
|
// 设置当前播放的曲目
|
|
|
setMusic: function (index) {
|
|
|
var music = this.data.playlist[index]
|
|
|
this.audioBam.src = music.src
|
|
|
this.audioBam.title = music.title
|
|
|
this.setData({
|
|
|
playIndex: index,
|
|
|
'play.title': music.title,
|
|
|
'play.singer': music.singer,
|
|
|
'play.coverImgUrl': music.coverImgUrl,
|
|
|
'play.currentTime': '00:00',
|
|
|
'play.duration': '00:00',
|
|
|
'play.percent': 0,
|
|
|
state: 'running' // 新增
|
|
|
})
|
|
|
},
|
|
|
changeItem: function (e) {
|
|
|
this.setData({
|
|
|
item: e.target.dataset.item
|
|
|
})
|
|
|
},
|
|
|
changeTab: function (e) {
|
|
|
this.setData({
|
|
|
tab: e.detail.current
|
|
|
})
|
|
|
},
|
|
|
play: function () {
|
|
|
this.audioBam.play()
|
|
|
this.setData({
|
|
|
state: 'running'
|
|
|
})
|
|
|
console.log(this.data.state) // running
|
|
|
},
|
|
|
pause: function () {
|
|
|
this.audioBam.pause()
|
|
|
this.setData({
|
|
|
state: 'paused'
|
|
|
})
|
|
|
console.log(this.data.state) // paused
|
|
|
},
|
|
|
// 点击播放下一曲的操作
|
|
|
next: function () {
|
|
|
var index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1
|
|
|
this.setMusic(index)
|
|
|
console.log(this.data.state)
|
|
|
// if (this.data.state === 'running') {
|
|
|
// this.play()
|
|
|
// }
|
|
|
},
|
|
|
// 点击播放列表中的某一项时进行该曲目的播放
|
|
|
change: function (e) {
|
|
|
this.setMusic(e.currentTarget.dataset.index)
|
|
|
// this.play()
|
|
|
}
|
|
|
})
|
|
|
|