Calling end
metodo su buffered
senza controllare è inaffidabile. È possibile che tu stia cercando di chiamare il metodo sul nulla. Controllare questo violino:
document.querySelector('span').innerHTML = document.querySelector('audio').buffered.length;
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Buffered Length: <span></span></p>
Vedi? All'inizio, la lunghezza del buffer è 0 - non è stato caricato nulla. È necessario essere sicuri che la lunghezza del buffer non sia 0 prima di chiamare il metodo start
o end
.
Ogni volta che leggete buffered
, è fissato in effetti. Quindi, per ottenere un effetto visivamente "carico", è necessario leggerlo ancora e ancora e ancora.
Qui provo a aggiornare la percentuale caricato e giocato ogni 50 millisecondi:
var audio = document.querySelector('audio');
var percentages = document.querySelectorAll('span');
function loop() {
var buffered = audio.buffered;
var loaded;
var played;
if (buffered.length) {
loaded = 100 * buffered.end(0)/audio.duration;
played = 100 * audio.currentTime/audio.duration;
percentages[0].innerHTML = loaded.toFixed(2);
percentages[1].innerHTML = played.toFixed(2);
}
setTimeout(loop, 50);
}
loop();
<audio src="http://myst729.qiniudn.com/within-temptation_pale.mp3" controls autoplay></audio>
<p>Loaded: <span></span>%</p>
<p>Played: <span></span>%</p>
NOTA: Il file MP3 potrebbe non essere accessibile al tuo posto. Se è così, prova un'altra fonte a tuo favore. Altrimenti sentirai una bella voce femminile, e vedere la percentuale cambia continuamente, finendo per finire al 100%.
Giusto per chiarire, il myProgressBar' elemento '# si presume essere un ' 'elemento, che ha un proprietà 'value'. – hawkharris