提问人:Mat 提问时间:8/15/2022 最后编辑:kissuMat 更新时间:8/16/2022 访问量:861
Vue-注意音频时间变化
Vue- watch for audio time change
问:
我有一个播放歌曲的音频文件。我目前正在制作一个等于歌曲长度和当前时间的滑块。你不能在 Vue 的 watch 组件中使用 player.currentTime,那么你将如何实时更新等于玩家当前时间的值。
我目前有,但只有在我暂停歌曲而不是实时更新时才会更新。v-model="player.currentTime"
这就是我目前所拥有的
player: new Audio()
this.player.src = this.songs[this.songIndex].src
this.player.play()
选手:
<input
type="range"
name="timeStamp"
ref="time"
v-model.lazy="this.player.currentTime"
step="0.1"
class="w-[100%] hover:cursor-pointer"
/>
答:
2赞
Raeisi
8/16/2022
#1
你必须听事件。我做了一个简单的示例代码:timeupdate
输出:
<template>
<div style="border: 1px solid gray; border-radius: 5px; padding: 5px;">
<div>
<button @click="play">Play | Pause</button>
{{ timeLabel }}
</div>
<div>
<input
type="range"
:min="0"
:max="duration"
v-model="currentTime"
@input="updateTime"
>
</div>
</div>
</template>
<script>
export default {
name: 'BaseAudioPlayerTest',
data() {
return {
src: 'Spring-Flowers.mp3',
player: null,
duration: 0,
currentTime: 0,
timeLabel: '00:00:00',
};
},
methods: {
play() {
if (this.player.paused) {
this.player.play();
this.duration = this.player.duration;
} else {
this.player.pause();
}
},
updateTime() {
this.player.currentTime = this.currentTime;
},
timeupdate() {
this.currentTime = this.player.currentTime;
const hr = Math.floor(this.currentTime / 3600);
const min = Math.floor((this.currentTime - (hr * 3600)) / 60);
const sec = Math.floor(this.currentTime - (hr * 3600) - (min * 60));
this.timeLabel = `${hr.toString()
.padStart(2, '0')}:${min.toString()
.padStart(2, '0')}:${sec.toString()
.padStart(2, '0')}`;
},
},
mounted() {
this.player = new Audio(this.src);
this.player.addEventListener('timeupdate', this.timeupdate, false);
},
};
</script>
您可以在此处找到更多信息。
评论
0赞
parsecer
4/28/2023
何时在代码中调用 from?play()
methods
1赞
kissu
4/28/2023
@parsecer按钮单击(第 4 行)。
评论
v-model
blur
lazy
v-model
@input
timeupdate
@timeupdate