跟踪HTMLAudio播放的总时间

时间:2018-12-13 19:36:33

标签: javascript html html5 audio time

如何跟踪HTMLAudio总共播放了多长时间?

我试图做的是每次音频开始播放或暂停时运行以下功能:

let totalTimeInSeconds = 0;
let intervalId = null;

const startedToPlay = function() {
    intervalId = setInterval(function() { ++totalTimeInSeconds; }, 1000);
};
const pausedPlaying = function() {
    clearInterval(intervalId);
};

但是我有点不同。差别是+ -20秒。

那么,什么是更好的方法呢?

为了避免x-y problem:一旦音频播放的时间总计超过指定的时间量(这意味着我们可以来回倒带音频,仍然我们只对总收听时间感兴趣,而不对音频的长度感兴趣。

谢谢。

1 个答案:

答案 0 :(得分:1)

我要解决的方法是简单地设置他们开始播放时的超时,并在他们暂停时清除超时,并更新仅在暂停时剩余的总时间。

类似的东西:

const SECOND = 1000;
let timeLeft = 5 * SECOND;
let startTime = null;
let timeout = null;
let div = document.getElementById('timer')
let toggle = document.getElementById('toggle');
let playing = false;
toggle.addEventListener('click', () => {
    if (playing) {
        pausedPlaying();
    } else {
        startedToPlay();
    }
    playing = !playing;
});

const startedToPlay = function() {
    startTime = (new Date()).getTime();
    timeout = setTimeout(() => alert(), timeLeft);
};

const pausedPlaying = function() {
    clearTimeout(timeout);
    timeLeft -= (new Date()).getTime() - startTime;
    startTime = null;
};

setInterval(() => div.textContent = startTime ? (timeLeft - ((new Date()).getTime() - startTime)) : timeLeft);
<div id="timer">5</div>

<button id="toggle">Start/Stop</button>

请注意,底部的时间间隔仅用于更新剩余的显示时间。