HTML 音频无法设置 currentTime
你需要做这样的事情(如果你使用jQuery)
$('#elem_audio').bind('canplay', function() {
this.currentTime = 10;
});
或在 Javascript 中
var aud = document.getElementById("elem_audio");
aud.oncanplay = function() {
aud.currentTime = 10;
};
此设置背后的原因是您需要确保音频已准备好播放。
检查您的 HTTP 服务器配置,在我的测试环境(Mac OS 上的 Chrome 69)中,设置音频元素的currentTime属性仅在音频源由支持持久连接的 HTTP 服务器提供服务时才有效。
如果你使用的 HTTP 服务器支持持久连接,你会发现(在 Chrome DevTool 中)你的音频源响应头的 Connection 字段是keep-alive。相比之下,如果音频源由不兼容的持久连接服务器提供服务,则响应标头中将没有 Connection 字段。
您的音频源 HTTP 请求的状态码也将作为参考,206 Partial Content表示支持长连接的服务器,200 OK表示较低的服务器。
我遇到了同样的问题,原因是 mp3 文件中缺少标题,例如:
Content-Length, Content-Range, Content-Type
为什么我设置不了
currentTime
?
currentTime
设置为0
后无法重现设置为10
。是18.mp3
持续时间不到10
?
var request = new XMLHttpRequest();
request.open("GET", "/assets/audio/18.mp3", true);
request.responseType = "blob";
request.onload = function() {
if (this.status == 200) {
var audio = new Audio(URL.createObjectURL(this.response));
audio.load();
audio.currentTime = 10;
audio.play();
}
}
request.send();
jsfiddle http://jsfiddle.net/Lg5L4qso/3/
在我开始使用 VS Code 的 PHP 服务器扩展来为我的 HTML/PHP 本地测试提供服务后,我遇到了这个问题。通过回到我旧的 Abysswebserver 设置,我解决了这个问题。
因此,这不仅仅是“您不能在本地提供的文件上操作 .currentTime”,而是“您需要选择一个可以为您提供正确标头的服务器”。例如,来自 AbyssWebserver 的我的文件的状态条目为“状态代码:206 部分内容”,而来自 PHP 服务器的文件为“状态代码:200 OK”。
但是还有其他差异,因此可能不仅仅是状态条目。请参阅https://github.com/brapifra/vscode-phpserver/issues/85以获取完整的标头比较。