@mirikkingg

Audio.duration возвращает infinity, почему?

При этом currentTime работает корректно. А вот duration работать не хочет, что не так? При этом если песня на сервере полностью проигралась - duration возвращается правильно.

6228e4a1c1322789856209.png

<audio src="123.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)
  • Вопрос задан
  • 611 просмотров
Решения вопроса 1
@alexshipin
javascript-developer

A double-precision floating-point value indicating the duration of the media in seconds. If no media data is available, the value NaN is returned. If the element's media doesn't have a known duration—such as for live media streams—the value of duration is +Infinity.


Мат часть

Говоря другим языком, ваш код думает, что элемент ещё не загружен (загружается в процессе), необходимо добавить Listener, как пример:
audioPlayer.addEventListener('loadedmetadata', function () {
    if (audioPlayer.duration == Infinity) {
        audioPlayer.currentTime = 1e101;
        audioPlayer.ontimeupdate = () => {
            this.ontimeupdate = () => {
                return;
            }
            vid.currentTime = 0;
            return;
        }
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы