156 lines
4.7 KiB
JavaScript
156 lines
4.7 KiB
JavaScript
// packageC/components/audio-slider/audio-slider.js
|
||
Component({
|
||
/**
|
||
* 组件的属性列表
|
||
*/
|
||
properties: {
|
||
src: {
|
||
value: '',
|
||
type: String
|
||
},
|
||
duration: {
|
||
value: 0,
|
||
type: String
|
||
},
|
||
},
|
||
|
||
/**
|
||
* 组件的初始数据
|
||
*/
|
||
data: {
|
||
songStop: false,
|
||
innerAudioContext: null,
|
||
slmin: '00:00',
|
||
audio_duration: '00:00',
|
||
currentTime: 0,
|
||
valueSlmin: 0,
|
||
draging: false //正在拖拽
|
||
},
|
||
lifetimes: {
|
||
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
|
||
attached() {
|
||
this.init();
|
||
},
|
||
moved() {},
|
||
detached() {
|
||
if (this.data.innerAudioContext) this.data.innerAudioContext.destroy();
|
||
},
|
||
},
|
||
/**
|
||
* 组件的方法列表
|
||
*/
|
||
methods: {
|
||
init() {
|
||
var that = this;
|
||
this.data.innerAudioContext = wx.createInnerAudioContext();
|
||
this.data.innerAudioContext.src = this.data.src;
|
||
if (!this.data.src) {
|
||
wx.showToast({
|
||
title: "音频链接出错!",
|
||
icon: "error",
|
||
});
|
||
return;
|
||
}
|
||
this.data.innerAudioContext.onCanplay(() => {
|
||
console.log('音频进入可以播放状态========================',this.data.duration,this.data.innerAudioContext.duration);
|
||
setTimeout(() => {
|
||
let _duration = this.data.innerAudioContext.duration != Infinity || !this.data.innerAudioContext.duration ? this.data.innerAudioContext.duration : this.data.duration;
|
||
let duration = parseInt(_duration);
|
||
this.setData({
|
||
audio_duration: duration ? this.realFormatSecond(duration) : '---',
|
||
draging: false,
|
||
slmin: "0:00:00",
|
||
});
|
||
}, 200);
|
||
});
|
||
this.data.innerAudioContext.onPlay(() => {
|
||
console.log('开始播放');
|
||
this.setData({
|
||
songStop: true
|
||
});
|
||
});
|
||
this.data.innerAudioContext.onTimeUpdate(() => {
|
||
if (this.data.draging) return;
|
||
if (!this.data.innerAudioContext.currentTime) return;
|
||
let _duration = this.data.innerAudioContext.duration != Infinity || !this.data.innerAudioContext.duration ? this.data.innerAudioContext.duration : this.data.duration;
|
||
|
||
let smun = (parseInt(this.data.innerAudioContext.currentTime) / parseInt(_duration)) * 100;
|
||
|
||
let duration = this.realFormatSecond(_duration);
|
||
if (this.data.currentTime && this.data.currentTime == parseInt(this.data.innerAudioContext.currentTime)) return;
|
||
this.data.currentTime = parseInt(this.data.innerAudioContext.currentTime);
|
||
var valueSlmin = parseInt(smun);
|
||
that.setData({
|
||
valueSlmin: valueSlmin, //进度条百分比
|
||
audio_duration: duration, //音频时长
|
||
slmin: this.realFormatSecond(parseInt(this.data.innerAudioContext.currentTime)) //当前播放时间
|
||
});
|
||
});
|
||
this.data.innerAudioContext.onError((res) => {
|
||
wx.showToast({
|
||
title: "播放错误",
|
||
icon: "none",
|
||
});
|
||
this.setData({
|
||
songStop: false
|
||
});
|
||
});
|
||
this.data.innerAudioContext.onEnded((res) => {
|
||
console.log('结束播放');
|
||
this.setData({
|
||
songStop: false,
|
||
valueSlmin: 0,
|
||
slmin: "0:00:00",
|
||
draging: false
|
||
});
|
||
// this.data.innerAudioContext.seek(0);
|
||
});
|
||
this.data.innerAudioContext.onPause(() => {
|
||
this.setData({
|
||
songStop: false
|
||
});
|
||
});
|
||
// this.data.innerAudioContext.onSeeked(() => {
|
||
// // this.playMusic()
|
||
// });
|
||
},
|
||
sildein(e) {
|
||
var setvalue = e.detail / 100;
|
||
let _duration = this.data.innerAudioContext.duration != Infinity || !this.data.innerAudioContext.duration ? this.data.innerAudioContext.duration : this.data.duration;
|
||
var long = _duration * setvalue;
|
||
this.data.innerAudioContext.seek(long);
|
||
},
|
||
realFormatSecond(second) {
|
||
var secondType = typeof second;
|
||
|
||
if (secondType === "number" || secondType === "string") {
|
||
second = parseInt(second);
|
||
|
||
var hours = Math.floor(second / 3600);
|
||
second = second - hours * 3600;
|
||
var mimute = Math.floor(second / 60);
|
||
second = second - mimute * 60;
|
||
if (isNaN(second)) {
|
||
return '---';
|
||
} else {
|
||
return hours + ":" + ("0" + mimute).slice(-2) + ":" + ("0" + second).slice(-2);
|
||
}
|
||
|
||
} else {
|
||
return "0:00:00";
|
||
}
|
||
},
|
||
playMusic() {
|
||
this.data.innerAudioContext.play();
|
||
},
|
||
pauseMusic() {
|
||
this.data.innerAudioContext.pause();
|
||
},
|
||
startDrag() {
|
||
this.data.draging = true;
|
||
},
|
||
endDrag() {
|
||
this.data.draging = false;
|
||
}
|
||
}
|
||
}); |