Vue(Nuxt)中的音频加载事件

Posted

技术标签:

【中文标题】Vue(Nuxt)中的音频加载事件【英文标题】:Audio loaded event in Vue (Nuxt) 【发布时间】:2021-06-11 13:30:41 【问题描述】:

我有一个基于 Nuxt 的 gsap (greensock) 动画,只有当我正在加载的音轨可用时,我才会尝试启动该动画。

音频的 html

<audio id="explainer_nar" preload="auto">
  <source src="/audio/explainer-nar.mp3" type="audio/mpeg" />
  <source src="/audio/explainer-nar.ogg" type="audio/ogg" />
</audio>

我的 gsap 时间线存储在一个名为 gsap_anim 的方法中。在该方法中,我使用以下方法启动上述音频:

const narration = document.getElementById('explainer_nar')
narration.currentTime = 0
narration.play()

现在,在我的挂载中,我想在开始动画之前等待音频加载,因为当我只使用以下内容时:

mounted() 
  this.gsap_anim()

音频没有播放(可能是因为它还没有加载)。

那么,在 Vue(尤其是 Nuxt)中,如何为 HTML5 音频元素设置监听器,以便仅在加载时播放 gsap_anim 方法?

【问题讨论】:

【参考方案1】:

当浏览器有足够的数据开始播放时,&lt;audio&gt; 元素会发出一个canplay event,而当加载完整的媒体剪辑时,canplaythrough event 可以播放到它的结束

您可以为执行 GSAP 动画的canplay/canplaythrough 添加事件侦听器:

const narration = document.getElementById('explainer_nar')

narration.addEventListener('canplay', () => 
  // GSAP animation code here...
)

narration.currentTime = 0
narration.play()

【讨论】:

【参考方案2】:

这个答案有帮助吗:https://***.com/a/6313040/8816585

另外,如果你想确定这是一个 eventListener 问题,你可以加载你的页面,然后瞄准你的浏览器 devtools 将它发送到控制台,看看narration.play() 是否正在播放。

这样你就可以确定是因为它还没有加载还是其他问题。

【讨论】:

以上是关于Vue(Nuxt)中的音频加载事件的主要内容,如果未能解决你的问题,请参考以下文章

预加载音频文件/事件?

Vue动态修改音频url

vue项目中如何通过点击事件读取音频文件的方法

支持vue3.0 中的音频插件都有哪些?

vue3 自定义 audio音频播放效果

在 vue 中构建音频播放器;如何在更改绑定后开始播放音频:src?