11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
je veux mettre à un niveau de volume réduit plusieurs lecteurs audio html5 dès l'ouverture de la page. Le petit bout de code js ci-dessous fait très bien l'affaire. Est-il possible de le simplifier, de ne pas répéter la commande pour tous les lecteurs audio ? Le faire en une seule ligne ? Je n'ai pas trouvé la réponse sur les forums.
<script>
  var audio = document.getElementById("myaudio");
  audio.volume = 0.4;
   var audio = document.getElementById("myaudio1");
  audio.volume = 0.4;
   var audio = document.getElementById("myaudio2");
  audio.volume = 0.4;
   var audio = document.getElementById("myaudio3");
  audio.volume = 0.4;
   var audio = document.getElementById("myaudio4");
  audio.volume = 0.4;
</script>
Modérateur
Salut,

Tu peux faire une truc du genre :

function initAudio(id, volume) {
  var audio = document.getElementById(id);
  audio.volume = volume;
}
initAudio('myaudio', 0.4);
initAudio('myaudio1', 0.4);
initAudio('myaudio2', 0.4);
initAudio('myaudio3', 0.4);
initAudio('myaudio4', 0.4);


J'ai pas vérifié le code ni rien je l'ai juste tapé ici donc y'a peut etre des trucs a corriger...
Modifié par _laurent (29 May 2020 - 00:15)
Modérateur
Ce code (ci-dessous) ne fonctionne pas ?

document.querySelectorAll('audio').forEach(($audio)=>{
    $audio.volume = 0.4;
});
Meilleure solution
Je viens de tester, il fonctionne parfaitement.
Merci beaucoup, c'est ce que je voulais, deux lignes en lieu et place de n lignes. Comme je suis un peu débutant en js, j'avais imaginé que l'on pouvait mettre plusieurs myaudio les uns derrière les autres, avec une virgule entre chaque Smiley cligne Ça ne fonctionne pas. Ma première idée de var empilés avait été faite par essais, au hasard mais il faut toujours penser que le code permet de simplifier les tâches, d'où ma demande.
Juste une question, pourquoi as-tu mis ('audio') et pas ('myaudio') ?

ps: 4.22 du matin, maintenant, il faut aller dormir, à moins que tu ai installé un envoi automatique différé ?
Modérateur
Bongota a écrit :

Juste une question, pourquoi as-tu mis ('audio') et pas ('myaudio') ?

j'attaque l'élément et non un attribut. Tu peux faire ceci :

//mettre la class myaudio sur chaque élément <audio class="myaudio" .... >
document.querySelectorAll('.myaudio')...

ou sinon :

//sélectionne les <audio> dont l'id commence par myaudio
document.querySelectorAll('audio[id^="myaudio"]')...


Bongota a écrit :

ps: 4.22 du matin, maintenant, il faut aller dormir, à moins que tu ai installé un envoi automatique différé ?



bien vu Smiley smile j'ai bossé sur un projet cette nuit et me suis recouché vers 5:30