vue中实现语音播放、暂停、结束监听等
vue中实现语音播放、暂停、结束监听等
·
<div class="Box">
<div class="article">
<div class="btnGroup">
<i :class="btnClassName" @click="ctrlAudio"></i>
</div>
<div v-html="text"></div>
</div>
</div>
懂得都懂!!!
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
data() {
return {
text: '',
btnClassName: 'el-icon-video-play',
//用于存放语音实体和队列实体
audio: {
synth: '',
utterance1:''
}
};
},
computed: {
// 获取id,用于获取文章
rankInfoId() {
return this.$store.state.rightMaskTemporaryData.id
}
},
mounted() {
this.getTextArr();
},
methods: {
//控制语音播放、暂停,同时更改图标
ctrlAudio() {
if (this.btnClassName == 'el-icon-video-pause') {
this.audio.synth.pause();
this.btnClassName = 'el-icon-video-play'
} else {
this.btnClassName = 'el-icon-video-pause'
this.audio.synth.resume()
}
},
//获取文章内容,用于渲染
getTextArr() {
MB_INFO({
groupId: this.rankInfoId
}).then(msg => {
console.log(msg);
this.getArticle(msg.data);
})
},
//生成html 用于元素渲染
getArticle(arr) {
this.text = "";
for (let a of arr) {
this.text +=
`
<div class="audio audio_${a.id} ${a.infotype_code}" >
${a.info}
</div>`
}
var domFlag = {};
//语音播放代码
this.audio.synth = window.speechSynthesis;
//新建实例
this.audio.synth.cancel();
//语音开始前先取消上一个
this.btnClassName = 'el-icon-video-play'
//循环添加到队列
for (let b of arr) {
this.audio.utterance1 = new SpeechSynthesisUtterance(b.info);
this.audio.synth.speak(this.audio.utterance1);
this.btnClassName = 'el-icon-video-pause'
//
this.audio.utterance1.onstart = function (e) {
domFlag = {}
domFlag = {
type: b.codeName,
typeCode: b.typeCode,
id: b.id,
groupId:b.groupId
};
zlsMapTool.lunboTool(domFlag.groupId,domFlag.type);
}
//每个语音播报结束后的行为
this.audio.utterance1.addEventListener('end', () => {
domFlag = {}
})
}
}
},
beforeDestroy() {
this.audio.synth.cancel();
layer.close(layerIndexByLunbo)
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)