<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. 其它——Apache-ab压力测试工具使用

    文章目录 一 介绍 二 安装 2.1 windows安装 2.2 Linux安装 三 使用 四 参数介绍 一 介绍 Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工 ...

  2. hadoop集群搭建及编程实践

    Hadoop集群搭建 前期准备及JDK,hadoop安装 设置主机名和添加主机映射 验证连通性 SSH无密码登录 配置集群/分布式环境 修改workers 修改文件core-site.xml 修改hd ...

  3. 俄罗斯版IDM安装与破解以及解决B站视频网站不弹出下载浮窗

    IDM 全称 Internet Download Manager,是一款非常优秀的多线程下载和视频嗅探工具,不仅可以显著提高文件下载速度,配合IDM浏览器扩展插件,还可以嗅探并下载YouTube.知乎 ...

  4. 聊聊Maven的依赖传递、依赖管理、依赖作用域

    1. 依赖传递 在Maven中,依赖是会传递的,假如在业务项目中引入了spring-boot-starter-web依赖: <dependency> <groupId>org. ...

  5. 【译】为什么命名“它”为依赖属性(DependencyProperty)

    当我们创建新的类和成员时,我们花费了大量的时间和精力是它们尽可能的好用,好理解,好发现.通常我们会遵循.Net框架设计指南,尤其是会不断地研究这个新类与其他类,未来计划等内容之间的关系. 当命名依赖属 ...

  6. 记一次MySQL5初始化被kill的问题排查

    写在前面 由于测试环境JED申请比较繁琐,所以Eone提供了单机版Mysql供用户使用,近期Eone搭建Mysql5的时候发现莫名被kill了,容器规格是4C8G,磁盘30G 这不科学,之前都是可以的 ...

  7. Vue源码学习(十二):列队处理(防抖优化,多次调用,只处理一次)

    好家伙, 本篇讲的是数据更新请求列队处理 1.一些性能问题 数据更新的核心方法是watcher.updata方法 实际上也就是vm._updata()方法, vm._updata()方法中的patch ...

  8. 在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结

    在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结 (p指向的不是第一个,也不是最后一个)A->B->C *p->B 插入(在p结点之前插入q) 解析: 直接往p前插入q, ...

  9. postgresql 最近优化的SQL集合案例、(不写过程了只记录案例,PG优化器问题还是不少)

    案例1: -- 原SQL + 执行计划: explain analyze SELECT G.PID, G.FLOW_ID, G.STATUS, G.ID, AAAAAA.INFO_ID, G.CREA ...

  10. 微信支付:wxpay.unifiedOrder(data)返回appid 与 openId 不配

    原因:小程序和APP.公众号等支付方式夸端口调用支付,后台配置多个appId时 A程序中的openid 在B程序中支付.即使用A程序的openid和B程序的appIdy去调用wxpay.unified ...