Как завершить интервал, используемый для вызова функции, которая обновляет время с помощью Howler.js - PullRequest
1 голос
/ 22 сентября 2019

Я сделал функцию UpdateTime(x), которая обновляет, получает текущее и общее время песни и записывает внутри div.

Я вызываю эту функцию на onload ( Howler.js ), поэтому он записывает 0:0/song:time, когда песня загружена, и на onplay ( Howler.js ) с интервалом каждые 50 миллисекунд, поэтому он автоматически обновляет время, когда я начинаю игратьпесня.

Моя проблема в том, что это приведет к бесконечному циклу и эффекту исполнения.

Мой вопрос: Как мне закончить этот бесконечный цикл, когда песня перестает воспроизводиться?

Если у кого-то из вас есть более элегантный подход к обновлению времени с помощью Howler.js , я также был бы признателен.

var songname = new Howl({
    src: ['mp3/songname.mp3'],
    onload: function() {
        UpdateTime(songname);
    },
    onplay: function() {
        setInterval(function(){
            UpdateTime(songname);
        },50);
    }/*,
    onend: function() {
        maybe end the interval here?...
    }*/
});

function UpdateTime(x){
    let a = (x.seek()).toFixed();
    let a2 = Math.floor(a / 60);
    let a1 = a - a2 * 60;
    let b = (x.duration()).toFixed();
    let b2 = Math.floor(b / 60);
    let b1 = b - b2 * 60;
    document.getElementById("time").innerHTML=a2+":"+a1+" / "+b2+":"+b1;
}

1 Ответ

0 голосов
/ 24 сентября 2019

Это ошибка, но не совсем решение вашей проблемы:

Здесь вы назначаете строку для b (toFixed() возвращает строку):

let b = (x.duration()).toFixed();

И здесьвы пытаетесь разделить строку на 60.

let b2 = Math.floor(b / 60);

В результате получается undefined.

...