添加链接描述
二:
<audio
controls
:src="item.src"
class="mt10 audio4"
:data-id="`audio3${item.id}`"
@play="handlePlay(`audio3${item.id}`)"
></audio>
handlePlay(id) {
this.videoElement = document.getElementsByTagName('audio')
Array.from(this.videoElement).forEach(item => {
if (item.dataset.id == id) {
item.play()
} else {
item.pause()
}
})
},
三:
data() {
return {
items: [
{
type: 'audio',
audio: new Audio('http://xxx1.mp3')
},
{
type: 'text',
content: '这是一段文本'
},
{
type: 'audio',
audio: new Audio('http://xxx2.mp3')
},
{
type: 'image',
src: 'http://xxx.jpg'
},
{
type: 'audio',
audio: new Audio('http://xxx3.mp3')
}
],
currentAudio: null
}
},
methods: {
playOrPause(audio) {
if (this.currentAudio && this.currentAudio !== audio && !this.currentAudio.paused) {
this.currentAudio.pause();
}
this.currentAudio = audio;
if (this.currentAudio.paused) {
this.currentAudio.play();
} else {
this.currentAudio.pause();
}
},
audioEnd(audio) {
this.currentAudio = null;
}
}
然后在模板中使用v-if和v-else-if来根据type属性渲染不同的组件:
<div v-for="item in items" :key="item.type">
<audio-component v-if="item.type === 'audio'" :audio="item.audio" @playOrPause="playOrPause" @audioEnd="audioEnd"></audio-component>
<p v-else-if="item.type === 'text'">{{ item.content }}</p>
<img v-else-if="item.type === 'image'" :src="item.src">
</div>