js 中 ios 获取 audio.duration为NaN
时间: 2024-03-20 16:40:25 浏览: 15
在 iOS 中,获取 audio 元素的 duration 属性可能会返回 NaN。这可能是因为 audio 元素尚未加载完全,或者音频文件的元数据中缺少所需的信息。
为了解决这个问题,您可以尝试使用以下方法:
1. 等待 audio 元素加载完成后再获取 duration 属性,可以通过监听 `loadedmetadata` 事件来实现:
```
var audio = document.getElementById('audio');
audio.addEventListener('loadedmetadata', function() {
console.log(audio.duration);
});
```
2. 如果音频文件的元数据中缺少 duration 信息,您可以使用第三方库来解析音频文件并获取 duration。例如,您可以使用 `wavefile` 库来解析 WAV 文件:
```
var xhr = new XMLHttpRequest();
xhr.open('GET', 'audio.wav', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
var wav = new WaveFile(xhr.response);
console.log(wav.getDuration());
};
xhr.send();
```
请注意,这需要您将音频文件转换为 WAV 格式。如果您仍然遇到问题,可以检查音频文件的元数据并确保其包含所需的信息。
相关问题
js 初始化给 audio 标签赋值 mp3 链接,然后 ios 获取 audio.duration为NaN
这个问题可能与iOS浏览器对自动播放的限制有关,iOS浏览器要求用户手动触发播放操作后才能获取音频的duration属性。你可以尝试在用户手动触发播放后再获取duration属性。你也可以在初始化时加入一些判断,如果是iOS浏览器,就不获取duration属性,而是等待用户手动触发播放后再获取。另外,你也可以尝试使用其他的音频播放库,如Howler.js或者SoundJS,它们可能能够更好地处理这个问题。
js 初始化且是暂停状态下 ios 获取 audio.duration
在iOS浏览器中,如果音频处于暂停状态,也是无法获取音频的duration属性的。一种解决方法是,在用户手动触发播放时,暂停音频,然后再获取duration属性,之后再将音频继续暂停。你可以尝试使用以下代码:
```javascript
var audio = new Audio('audio.mp3');
audio.preload = 'metadata'; // 提前加载metadata信息
audio.addEventListener('loadedmetadata', function() {
console.log('Duration: ' + audio.duration);
audio.pause(); // 暂停音频
});
// 用户手动触发播放操作
document.addEventListener('touchstart', function() {
audio.play();
});
```
在上面的代码中,我们使用了`loadedmetadata`事件来获取音频的metadata信息,包括duration属性。在用户手动触发播放操作时,我们暂停了音频,然后获取duration属性,最后再将音频继续暂停。请注意,上述代码仅适用于iOS浏览器,对于其他浏览器可能会有不同的处理方式。