audio.duration возвращает infinity, почему?
При этом currentTime работает корректно.
А вот duration работать не хочет, что не так? При этом если песня на сервере полностью проигралась - duration определяется правильно.
<audio src="../assets/tracks/104_Skriptonit_Miyagi_-_NE_ZHAL_68476686.mp3" data-musicid="0" class="track_audio"></audio>
$('.track_audio').trigger('load');
var audio = document.querySelector('.track_audio');
const updateProgress = function (e) {
console.log(e.target.currentTime);
console.log(e.target.duration);
}
audio.addEventListener('timeupdate', updateProgress)
console.log(audio.duration)
Ответы (1 шт):
Автор решения: Опан
→ Ссылка
Сразу после объявления audio (т. е., по ходу загрузки страницы) до выполнения остального кода не успевают загрузиться метаданные из аудиофайла, (audio.duration) поэтому вывод этого свойства следует обернуть функцией
audio.onloadedmetadata = function(){console.log(this.duration)};
// или
audio.onloadeddata = function(){console.log(this.duration)};
другие альтернативные случаи, когда выводится duration:
- временная задержка после объявления audio с помощью setTimeout().
- вывод duration по нажатию на кнопку или другому событию: (можно автоматическому)
button.onclick = "console.log(audio.duration)";
- Когда слишком много строк кода между объявлением audio и выводом duration.
В Вашем случае выводится уже после того, как начинает играть.