canplaythrough 事件和 HTM5 音频:任何人都可以删除此事件吗?

Vin*_*nce 5 html javascript audio

我创建了一个新的音频元素,并且可以成功加载、播放、暂停、静音等。但是,我注意到某些浏览器(FF、Opera)在我执行 play() 时总是会触发 canplaythrough 事件。Chrome 也有这方面的问题。但 Safari 的行为符合预期...该事件仅在 readState 更改为 HAVE_ENOUGH_DATA 后触发一次。

我还注意到没有浏览器会让我删除这个事件。

不断触发 canplaythrough 很烦人,因为我不一定希望每次播放音频文件时都执行附加到 canplaythrough 事件的处理程序。当 canplaythrough 被多次触发时,我在 Chrome 上也遇到了一些奇怪的播放错误。

谁能解释一下 canplaythrough 发生了什么以及为什么它在最初被触发后无法被删除。

谢谢。

Ada*_*onR 4

我已经能够在 Chrome(和 Safari,如果我没记错的话)中删除 canplaythrough 事件。

如下例所示的代码似乎对我有用:

// add event
audioElem.addEventListener("canplaythrough", displayHome, false);

// later remove event before triggering play
audioElem.removeEventListener("canplaythrough", displayHome, false);
Run Code Online (Sandbox Code Playgroud)

和你一样,当我没有在 Chrome 中删除该事件时,我注意到一些奇怪的播放问题。