微信小程序音频播放
audioWidth: 0, //播放进度的长
isPlaying: false, //是否正在播放
audioContent: null, //音频对象
currentTime: 0, //播放当前时间(处理后的 1:00)
duration: 0, //播放总时长 (处理后 4:30)
oriCurrentTime: 0, //播放当前时间 s
oriDuration: 100, //播放总时长 s
startPageX: 74, //开始的pageX
endPageX: 514, //结束的pageX
touchStartX: 0, //触摸开始pageX
<view class="progress-bar" bindtap="clickSeek">
<view class="all-time-line"></view>
<view class="play-time" style="width: {{audioWidth}}">
<view class="play-time-line"></view>
<view class="cicle" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd"></view>
</view>
</view>
.progress-bar{
position: relative;
width: 440rpx;
margin-left: 20rpx;
margin-right: 20rpx;
padding: 20rpx 0;
}
.all-time-line{
width: 100%;
height: 4rpx;
background-color: #C9C9C9;
}
.play-time{
width: 60%;
position: absolute;
left: 0;
top: 20rpx;
display: flex;
flex-direction: row;
align-items: center;
z-index: 2;
}
.play-time-line{
width: 100%;
height: 4rpx;
background-color: #1FAB89;
box-shadow:0 0 10rpx rgba(31,171,137,0.6);
}
.cicle{
font-size: 0;
position: absolute;
top: -8rpx;
right: -8rpx;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
background-color: #1FAB89;
}
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let that = this;
let src = '/images/index/Kalimba.mp3';
that.initMusic(src);
},
initMusic: function(audioSrc) {
// 音频
var that = this;
wx.getSystemInfo({
success: function(res) {
that.setData({
startPageX: res.windowWidth / 750 * that.data.startPageX,
endPageX: res.windowWidth / 750 * that.data.endPageX
})
},
})
let audioContent = wx.createInnerAudioContext();
that.setData({
audioContent: audioContent
})
audioContent = that.data.audioContent;
audioContent.src = audioSrc;
// 播放时间更新时
audioContent.onTimeUpdate(function() {
// if (that.data.oriDuration != 0) {
let currentTime;
let oriCurrentTime = parseInt(audioContent.currentTime);
that.setData({
currentTime: that.handle(oriCurrentTime),
// oriCurrentTime: parseInt(audioContent.currentTime)
audioWidth: oriCurrentTime / that.data.oriDuration * 100 + '%'
})
// }
})
// 播放结束时
audioContent.onEnded(function() {
that.setData({
isPlaying: false,
currentTime: 0,
audioWidth: '0%'
})
})
// 音频初始化完成设置时长
// audioContent.onCanplay(function() {
// audioContent.play();
// setTimeout(() => {
// that.setData({
// duration: that.handle(parseInt(audioContent.duration)),
// oriDuration: parseInt(audioContent.duration)
// })
// audioContent.stop();
// }, 1000)
// })
},
// 暂停播放点击
playMusic: function() {
var that = this;
// if(that.data.duration != 0){
if (that.data.isPlaying) {
that.setData({
isPlaying: false
})
that.data.audioContent.pause();
} else {
that.setData({
isPlaying: true
})
that.data.audioContent.play();
}
// }
},
// 秒变分钟
handle: function(time) {
return parseInt(time / 60) + ':' + ((time % 60) < 10 ? '0' + (time % 60) : (time % 60));
},
//滑动更改播放进度
touchStart: function(e) {
// console.log("x:" + e.touches[0].pageX + "Y:" + e.touches[0].pageY);
var that = this;
that.toSeek(e.touches[0].pageX);
},
touchMove: function(e) {
var that = this;
that.toSeek(e.touches[0].pageX);
// that.setData({
// touchStartX: e.touches[0].pageX
// })
},
touchEnd: function() {
var that = this;
that.toSeek(that.data.touchStartX);
},
clickSeek: function(e) {
let pageX = e.detail.x;
this.toSeek(pageX);
},
toSeek: function(pageX) {
var that = this;
// let playPercent = pageX / that.data.endPageX;
if (pageX > that.data.endPageX) {
pageX = that.data.endPageX;
}
if (pageX < that.data.startPageX) {
pageX = that.data.startPageX;
}
let playPercent = (pageX - that.data.startPageX) / (that.data.endPageX - that.data.startPageX);
// console.log(playPercent);
that.setData({
touchStartX: pageX,
audioWidth: playPercent * 100 + '%'
})
let oriCurrentTime = parseInt(that.data.oriDuration * playPercent);
that.data.audioContent.seek(oriCurrentTime);
that.setData({
oriCurrentTime: oriCurrentTime,
currentTime: that.handle(oriCurrentTime)
})
},

浙公网安备 33010602011771号