par Will 30-Mars-2022

Bonjour,

Comment placer plusieurs boutons audio play et pause sur une même page, pour que chaque nouvelle demande annule la lecture en cours ; et cela en utilisant le code publié sur cette autre question.

1 Réponse

par Antoine 30-Mars-2022

Bonjour, tout en reprenant mon code auquel vous faites référence, vous pouvez créer un conteneur via une balise <div> pour chaque bloc audio, puis utiliser une boucle for pour parcourir les différents blocs audio et ainsi mettre en pause ou en lecture :

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Comment créer plusieurs boutons audio sur une même page HTML ?</title>
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css'>
<style>
audio {
  display: none;
}
</style>
</head>
<body>
<div class="bloc">
  <audio src="https://www.1formatik.fr/conan/volcan.mp3"></audio>
  <button onclick="Action(this);">
    <i class="fas fa-volume-up fa-2x"></i>
  </button>
</div>
<div class="bloc">
  <audio src="https://www.1formatik.fr/conan/sw.mp3"></audio>
  <button onclick="Action(this);">
    <i class="fas fa-volume-up fa-2x"></i>
  </button>
</div>
<div class="bloc">
  <audio src="https://www.1formatik.fr/conan/pirates.mp3"></audio>
  <button onclick="Action(this);">
    <i class="fas fa-volume-up fa-2x"></i>
  </button>
</div>
<script>
var blocs = document.getElementsByClassName("bloc");
function Action(e)
{
  for(var i = 0; i < blocs.length; i++) 
  {
    if (blocs[i].contains(e) == false)
    {
      const contenus = blocs[i].children;
      const audio = contenus[0];
      const bouton = contenus[1];
      const icone = bouton.firstElementChild;
        if (audio.played) 
        {
          audio.pause();
          icone.classList.remove('fa-volume-mute');
          icone.classList.add('fa-volume-up');
        } 
    }
  }

  if (e.previousElementSibling.paused)
  {
    e.previousElementSibling.currentTime = 0;
    e.previousElementSibling.play();
    e.firstElementChild.classList.remove('fa-volume-up');
    e.firstElementChild.classList.add('fa-volume-mute');  
  }
  else
  {
    e.previousElementSibling.pause();
    e.firstElementChild.classList.remove('fa-volume-mute');
    e.firstElementChild.classList.add('fa-volume-up');
  }
}
</script>
</body>
</html>

Remarque : Pour qu'une musique ne redémarre pas au début lorsque l'utilisateur la met en pause et la relance, supprimez la ligne :

e.previousElementSibling.currentTime = 0;

Bienvenue sur 1FORMATIK, où vous pouvez poser des questions en lien avec l'informatique et internet, et recevoir des réponses d'Antoine et d'autres internautes.

2.6k questions

3k réponses

...