View Single Post
Limited edition
Moff's Avatar
Som Realist1 skrev rett ovenfor, det er korrekt at skriptet kjører før informasjonen er tilgjengelig. Det er nettopp derfor han sier at du må bruke en eventhandler, som sørger for at koden kjører når preload-eventen trigges og informasjonen er tilgjengelig. Legg til

Kode

preload="metadata"
i som en attributt på <audio>-objektet ditt, slik at du ber om å laste inn metadata for filene. Deretter registrerer du en eventhandler som lytter på loadmetadata-eventen:

Kode

audio.onloadedmetadata = function() {

};
Her er et komplett eksempel:

Kode

<audio controls preload="metadata">
	<source src="bra_låt.mp3" type="audio/mp3">
</audio>

<script>
	var audio = document.getElementsByTagName("audio");
	
	for(var i = 0; i < audio.length; i++) {
		(function(a) {
			a.onloadedmetadata = function() {
				// a.duration inneholder lengden i sekunder
				var seconds = Math.floor(a.duration % 60);
				var minutes = Math.floor((a.duration % 3600) / 60);
				
				// Legg til leading zeroes, hvis du vil ("3:2" -> "03:02")
				var duration = (minutes < 10 ? "0" : "") + minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
				
				console.log(duration); // Do stuffs
			};
		})(audio[i]);
	}
</script>