1. uniapp音频播放组件的使用
在uniapp中,我们可以使用官方提供的uni-audio组件来实现音频的播放和暂停操作。在页面中引入该组件后,可以通过设置组件的属性来控制音频的播放、进度、音量等。
1.1 引入uni-audio组件
在vue文件中引入uni-audio组件,可以使用以下代码:
<template>
<uni-audio
:src="url"
:paused="paused"
:current-time.sync="currentTime"
:duration="duration"
:volume="volume"
></uni-audio>
</template>
<script>
export default {
data() {
return {
url: '/static/audio.mp3',
paused: true,
currentTime: 0,
duration: 0,
volume: 1,
};
},
methods: {
play() {
this.paused = false;
},
pause() {
this.paused = true;
},
},
mounted() {
this.$refs.audio.onLoadedmetadata(() => {
this.duration = this.$refs.audio.duration;
});
},
};
</script>
在上面的代码中,我们首先定义了一个uni-audio组件,并指定了一些属性,包括音频文件地址、播放状态、当前播放时间、音频总时长和音量。其中 paused 属性用来控制播放和暂停,currentTime.sync 属性用来实现进度条的实时更新。在 mounted 阶段,我们监听了音频的 onLoadedmetadata 事件,以获取音频的总时长。
1.2 控制音频的播放和暂停
为了让用户能够控制音频的播放和暂停,我们需要在页面中添加相应的按钮或者图标。在点击播放按钮时,我们可以调用 play 方法来启动音频播放,在点击暂停按钮时,我们可以调用 pause 方法来暂停音频的播放。下面是代码示例:
<template>
<uni-audio
ref="audio"
:src="url"
:paused="paused"
:current-time.sync="currentTime"
:duration="duration"
:volume="volume"
></uni-audio>
<button @click="play">播放</button>
<button @click="pause">暂停</button>
</template>
<script>
export default {
data() {
return {
url: '/static/audio.mp3',
paused: true,
currentTime: 0,
duration: 0,
volume: 1,
};
},
methods: {
play() {
this.paused = false;
},
pause() {
this.paused = true;
},
},
mounted() {
this.$refs.audio.onLoadedmetadata(() => {
this.duration = this.$refs.audio.duration;
});
},
};
[xss_clean]
2. uniapp音频进度条的实现
2.1 实现进度条
为了实现音频进度条功能,我们需要在页面中添加一个进度条组件,并将其显示在播放控件下方。首先,我们需要在 data 中定义一个 progress 变量来表示当前的播放进度,然后在页面中使用 uni-progress 组件来显示进度条,如下所示:
<template>
<uni-audio
ref="audio"
:src="url"
:paused="paused"
:current-time.sync="currentTime"
:duration="duration"
:volume="volume"
></uni-audio>
<div class="progress-container">
<uni-progress :percent="progress"></uni-progress>
</div>
<div class="controls">
<!-- 播放/暂停按钮 -->
<button @click="play">播放</button>
<button @click="pause">暂停</button>
</div>
</template>
<style>
.progress-container {
width: 100%;
height: 6px;
background-color: #eee;
margin-top: 10px;
}
.controls {
display: flex;
justify-content: center;
margin-top: 10px;
}
</style>
<script>
export default {
data() {
return {
url: '/static/audio.mp3',
paused: true,
currentTime: 0,
duration: 0,
volume: 1,
progress: 0,
};
},
methods: {
play() {
this.paused = false;
},
pause() {
this.paused = true;
},
},
mounted() {
this.$refs.audio.onLoadedmetadata(() => {
this.duration = this.$refs.audio.duration;
});
setInterval(() => {
const currentTime = this.currentTime;
const duration = this.duration;
if (currentTime && duration) {
this.progress = (currentTime / duration) * 100;
}
}, 1000);
},
};
</script>
在上面的代码中,我们首先在 data 中新增了一个 progress 变量,用来表示当前的播放进度。然后在页面中使用 uni-progress 组件来显示进度条。由于 uni-progress 组件的 percent 属性接受一个百分比值来表示进度,因此我们需要通过计算出当前播放时间与音频总时长的比值,再将其乘以 100 得到百分比值,来更新进度条的进度。
为了实现进度条的实时更新,我们使用了 setInterval 方法,在播放过程中每隔 1 秒钟更新一次进度条的进度。
2.2 自定义进度条样式
为了让进度条更加美观,我们可以为其添加一些自定义样式。首先,我们可以在 uni-progress 组件中添加一个轨道和一个进度条,然后通过 CSS 来设置它们的样式。下面是代码示例:
<template>
<uni-audio
ref="audio"
:src="url"
:paused="paused"
:current-time.sync="currentTime"
:duration="duration"
:volume="volume"
></uni-audio>
<div class="progress-container">
<div class="progress-bar">
<div class="progress" :style="{ width: progress + '%' }"></div>
</div>
</div>
<div class="controls">
<!-- 播放/暂停按钮 -->
<button @click="play">播放</button>
<button @click="pause">暂停</button>
</div>
</template>
<style>
.progress-container {
width: 100%;
height: 4px;
background-color: #eee;
margin-top: 10px;
}
.progress-bar {
width: 100%;
height: 100%;
position: relative;
}
.progress {
height: 100%;
background-color: #f00;
}
.controls {
display: flex;
justify-content: center;
margin-top: 10px;
}
</style>
<script>
export default {
data() {
return {
url: '/static/audio.mp3',
paused: true,
currentTime: 0,
duration: 0,
volume: 1,
progress: 0,
};
},
methods: {
play() {
this.paused = false;
},
pause() {
this.paused = true;
},
},
mounted() {
this.$refs.audio.onLoadedmetadata(() => {
this.duration = this.$refs.audio.duration;
});
setInterval(() => {
const currentTime = this.currentTime;
const duration = this.duration;
if (currentTime && duration) {
this.progress = (currentTime / duration) * 100;
}
}, 1000);
},
};
</script>
在上面的代码中,我们首先为进度条添加了一个新的父容器 .progress-bar,并使用了 position: relative 来设置其相对定位。然后为 .progress 添加了 background-color 样式,用来表示进度条的颜色。最后,使用 :style 绑定了 width 样式,将进度条的宽度设置为当前播放进度的百分比。
3.总结
通过上述操作,我们可以成功地实现 uniapp 音频进度条的功能。首先,在页面中引入 uni-audio 组件,并设置其属性来控制音频的播放、进度、音量等。然后,使用 uni-progress 组件来实现进度条的显示,并通过计算播放时间与总时长的比值,来更新进度条的进度。最后,通过添加一些自定义样式来美化进度条的样式。