<template>
<div>
<audio ref="audio" :src="audioSrc"></audio>
<button @click="playAudio">播放</button>
<button @click="changePlaybackRate(1.5)">加速</button>
<button @click="changePlaybackRate(0.5)">减速</button>
</div>
</template> <script>
export default {
data() {
return {
audioSrc:
"https://dashanbook.oss-cn-shenzhen.aliyuncs.com/av/2023/12/04/537a6f61f94344979789779e25ea5f61.mp3",
endedListener: null, // 保存事件监听器
};
},
methods: {
playAudio() {
const audio = this.$refs.audio;
audio.play();
// 如果存在旧的 ended 事件监听器,需要先将其移除
if (this.endedListener) {
audio.removeEventListener("ended", this.endedListener);
}
// 保存新的事件监听器
this.endedListener = () => {
// 音频播放完成后的操作,可以返回一个东西
// 使用 Promise 来返回结果
this.someFunction().then((result) => {
console.log(result);
});
// 移除事件监听器
audio.removeEventListener("ended", this.endedListener);
};
// 在音频上添加事件监听器
audio.addEventListener("ended", this.endedListener);
},
changePlaybackRate(rate) {
this.$refs.audio.playbackRate = rate;
},
someFunction() {
return new Promise((resolve) => {
// 在这里执行需要返回的操作(监听音频播放完成)
resolve("返回的东西");
});
},
},
mounted() {
// 在组件挂载时添加事件监听器
const audio = this.$refs.audio;
audio.addEventListener("ended", this.endedListener);
},
destroyed() {
// 在组件销毁时移除事件监听器
const audio = this.$refs.audio;
audio.removeEventListener("ended", this.endedListener);
},
};
</script>

vue音频(监听播放完成)的更多相关文章

  1. vue时时监听input输入框中 输入内容 写法

    Vue input 监听 使用 v-on:input="change" 实现即可 App.vue <template> <div> <md-field ...

  2. Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)

    Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...

  3. 详解Vue 如何监听Array的变化

    详解Vue 如何监听Array的变化:https://www.jb51.net/article/162584.htm

  4. 设计模式(5): vue 不监听绑定的变量

    概述 最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用. 绑定变量 一般情况下,如果我们需要在组件中使用某个变量,会这么使用: ...

  5. 9.Vue.js 监听属性

    本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器: <div id = "app&q ...

  6. Vue -- 数据监听

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. vue.js 监听属性的学习/ 千米、米的转换 /时、分、秒 的转换

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 12.vue属性.监听.组件

    1.计算属性 https://cn.vuejs.org/v2/guide/computed.html new Vue({ computed:{//定义 show(){ } } }) ++计算属性1.h ...

  9. vue中监听window.resize的变化

    我只想说每个人遇到的bug真的不能一概而论,解决办法也会有不同.在vue中使用echarts的时候,会想要实现window.resize窗体变化大小的时候让图形大小跟着变化.实现的过程中各种bug,也 ...

  10. vue+hbuilder监听安卓返回键问题

    1.监听安卓返回键问题 效果:在一级页面按一下返回键提示退出应用,按两下退出应用;在其它页面中,按一下返回上个历史页面 1 2 import mui from './assets/js/mui.min ...

随机推荐

  1. 基于落点打分的井字棋智能下棋算法(C语言实现)

    本文设计了一种基于落地打分的井字棋下棋算法,能够实现电脑不败,所以如果玩家会玩的话,一般是平局. 算法核心 电脑根据对落子位置的打分,选择分数最高的位置,若不同落点分数相同则随机选择位置(随机选择就不 ...

  2. wireshark数据包时间戳修改

    1.数据包格式 两种数据包格式,pcap和pcapng两种.pcapng为升级版,时间戳细粒度更高. 2.时间戳位置(arrival time) 时间戳在数据包中表现为物理层的arrival time ...

  3. 未能添加SSL证书,错误1312

    1.win+r打开运行,输入mmc 2.在控制台1[控制台根节点]->文件->添加/删除....->选择证书->添加-选择计算机账户->完成->确认 3.找到证书文 ...

  4. My Code Style

    大家都在写,跟风. 头文件 万能头.因为我刚学 OI 的时候怎么都背不住 algorithm 怎么拼( 变量 数组开全局,一些前后重名/只在某一部分用的变量开局部. 尽量不使用指针/ stl 迭代器等 ...

  5. 栈源代码(c++)

    stack.h #ifndef STACK_H_ #define STACK_H_ #include<iostream> template<class T> struct No ...

  6. 昇腾迁移丨4个TensorFlow模型训练案例解读

    本文分享自华为云社区<TensorFlow模型训练常见案例>,作者: 昇腾CANN. 基于TensorFlow的Python API开发的训练脚本默认运行在CPU/GPU/TPU上,为了使 ...

  7. 解决报错Invalid bound statement (not found)

    解决报错Invalid bound statement (not found) 问题描述: 在玩mybatis-plus的时候,在测试类写了一个测试批量插入的方法,结果就报错: 它的意思是 无效的跳转 ...

  8. 16个值得推荐的.NET ORM框架(含使用情况统计的投票,欢迎参与)

    什么是ORM? ORM 是 Object Relational Mapping 的缩写,译为"对象关系映射",是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的 ...

  9. PIR传感器选型及其使用介绍

    (一)PIR简介 PIR传感器(Passive Infrared Sensor),即被动式红外传感器.它因为功耗低,价格低廉,使用简单从而被大量使用在门铃.猫眼.感应开关.小夜灯.安防等消费类产品上. ...

  10. 赛意SMOM和金蝶云星空单据接口对接

    赛意SMOM和金蝶云星空单据接口对接 数据源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式:通过标准的业务架构:多会计准则.多币别.多地点.多组织.多 ...