|
|
|
|
const app = getApp()
|
|
|
|
|
import dayjs from 'dayjs'
|
|
|
|
|
Component({
|
|
|
|
|
behaviors: [],
|
|
|
|
|
properties: {
|
|
|
|
|
audio: {
|
|
|
|
|
type: Object,
|
|
|
|
|
observer(val) {
|
|
|
|
|
if (val && this._currentAudioUrl && val.url === this._currentAudioUrl) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
this._currentAudioUrl = val ? val.url : ''
|
|
|
|
|
if (this.audioContext) {
|
|
|
|
|
const { play } = this.data
|
|
|
|
|
if (play) {
|
|
|
|
|
this.audioContext.pause()
|
|
|
|
|
this.setData({
|
|
|
|
|
play: false,
|
|
|
|
|
progress: 0,
|
|
|
|
|
time: '00',
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.audioContext.destroy()
|
|
|
|
|
}
|
|
|
|
|
if (val) {
|
|
|
|
|
this.audioAddEventListener(val)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data: {
|
|
|
|
|
Timestamp: app.globalData.Timestamp,
|
|
|
|
|
progress: 0,
|
|
|
|
|
time: '00',
|
|
|
|
|
duration: '00',
|
|
|
|
|
play: false,
|
|
|
|
|
loading: true,
|
|
|
|
|
|
|
|
|
|
imageUrl: app.globalData.imageUrl,
|
|
|
|
|
progressimg: true,
|
|
|
|
|
},
|
|
|
|
|
lifetimes: {
|
|
|
|
|
created() {
|
|
|
|
|
app.getTheme().then((res) => {
|
|
|
|
|
this.setData({
|
|
|
|
|
theme: res,
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
async attached() {},
|
|
|
|
|
moved() {},
|
|
|
|
|
detached() {
|
|
|
|
|
if (this.audioContext) {
|
|
|
|
|
const { play } = this.data
|
|
|
|
|
if (play) {
|
|
|
|
|
this.audioContext.pause()
|
|
|
|
|
}
|
|
|
|
|
this.audioContext.destroy()
|
|
|
|
|
}
|
|
|
|
|
this.audioAddEventListener = null
|
|
|
|
|
this.setData({
|
|
|
|
|
play: false,
|
|
|
|
|
progress: 0,
|
|
|
|
|
time: '00',
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
pageLifetimes: {
|
|
|
|
|
// 组件所在页面的生命周期函数
|
|
|
|
|
show: function () {},
|
|
|
|
|
hide: function () {
|
|
|
|
|
const { play } = this.data
|
|
|
|
|
if (play) {
|
|
|
|
|
this.audioContext.pause()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
resize: function () {},
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
togglePlay() {
|
|
|
|
|
const { play, loading } = this.data
|
|
|
|
|
if (loading) {
|
|
|
|
|
wx.showToast({
|
|
|
|
|
title: '音频加载中',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (play) {
|
|
|
|
|
this.audioContext.pause()
|
|
|
|
|
} else {
|
|
|
|
|
this.audioContext.play()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
formatTime(time) {
|
|
|
|
|
let m = parseInt(time / 60)
|
|
|
|
|
let s = parseInt(time % 60)
|
|
|
|
|
return this.towNum(m) + ':' + this.towNum(s)
|
|
|
|
|
},
|
|
|
|
|
towNum(num) {
|
|
|
|
|
if (num >= 10) {
|
|
|
|
|
return num
|
|
|
|
|
} else {
|
|
|
|
|
return '0' + num
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
audioAddEventListener(val) {
|
|
|
|
|
const that = this
|
|
|
|
|
this.setData({
|
|
|
|
|
duration: this.formatTime(val.size),
|
|
|
|
|
})
|
|
|
|
|
that.audioContext = wx.createInnerAudioContext()
|
|
|
|
|
that.audioContext.src = val.url
|
|
|
|
|
that.setData({
|
|
|
|
|
loading: false,
|
|
|
|
|
})
|
|
|
|
|
that.audioContext.onError(({ errCode, ...reset }) => {
|
|
|
|
|
console.log('reset: ', reset)
|
|
|
|
|
console.log('errCode: ', errCode)
|
|
|
|
|
if (errCode === 10004 || errCode == 10001 || errCode == -1) {
|
|
|
|
|
that.audioContext.destroy()
|
|
|
|
|
that.setData({
|
|
|
|
|
loading: true,
|
|
|
|
|
})
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
that.audioAddEventListener(val)
|
|
|
|
|
}, 300)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
that.audioContext.onPlay(() => {
|
|
|
|
|
that.setData({
|
|
|
|
|
play: true,
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
that.audioContext.onPause(() => {
|
|
|
|
|
console.log(1111111)
|
|
|
|
|
that.setData({
|
|
|
|
|
play: false,
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
that.audioContext.onEnded(() => {
|
|
|
|
|
that.audioContext.seek(0)
|
|
|
|
|
that.setData({
|
|
|
|
|
play: false,
|
|
|
|
|
progress: 0,
|
|
|
|
|
time: '00',
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
that.audioContext.onTimeUpdate(() => {
|
|
|
|
|
const duration = that.audioContext.duration || 0
|
|
|
|
|
const currentTime = that.audioContext.currentTime || 0
|
|
|
|
|
const progress = (currentTime / duration) * 100
|
|
|
|
|
if (duration == Infinity) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
that.setData({
|
|
|
|
|
play: true,
|
|
|
|
|
duration: that.formatTime(duration),
|
|
|
|
|
time: that.formatTime(currentTime),
|
|
|
|
|
})
|
|
|
|
|
if (that.data.progressimg) {
|
|
|
|
|
this.setData({
|
|
|
|
|
progress: progress,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
handleAuthChangeimg() {
|
|
|
|
|
console.log(11111)
|
|
|
|
|
this.setData({
|
|
|
|
|
progressimg: false,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
handleAuthChange(e) {
|
|
|
|
|
console.log(22222222222)
|
|
|
|
|
let { duration } = this.data
|
|
|
|
|
const secods = this.audioContext.duration || duration.split(':')[0] * 60 + duration.split(':')[1] * 1
|
|
|
|
|
const progress = e.detail.value
|
|
|
|
|
let seek = ((secods / 100) * progress).toFixed(3) * 1
|
|
|
|
|
this.audioContext.seek(seek)
|
|
|
|
|
this.setData({
|
|
|
|
|
progressimg: true,
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
})
|