11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,
Voilà, après avoir essayé de le faire par moi-même et cherché dans tous les recoins d'internet, je me suis dit que j'allais vous demander de m'aider.

J'ai un tableau d'une scène de bataille, avec une div faisant office de bouton "play" et une div faisant office de bouton "stop". Le play lance un son d'une personne expliquant les différents éléments du tableau, ainsi qu'un script affichant les différents éléments au bon moment placés dans des div invisibles rendues opaques, grâce à un setTimeout. Le stop arrête tout ça, comme on aurait pu s'y attendre.
Jusqu'ici, tout va bien, mais le problème, c'est que si on clique plusieurs fois sur le bouton play, le script se lance autant de fois et les éléments s'affichent plusieurs fois.

Donc il faudrait que le play soit désactivé pendant une minute, le temps que le son soit joué entièrement, avant d'être à nouveau cliquable. Mais il faudrait également qu'il redevienne actif si jamais on clique sur le bouton stop.

Si quelqu'un voit une solution, ce serait super sympa de m'aider parce que je bloque un peu !

Merci ! Smiley smile
Modifié par Little-Frog (06 May 2013 - 11:39)
Regarde ceci:
document.getElementById('play').onclick=function() {
  lireAudio();
  document.getElementById('play').onclick=function() {
    return false;
  }
}
document.getElementById('stop') {
  couperAudio();
  document.getElementById('play').onclick=function(){
    lireAudio();
    document.getElementById('play').onclick=function() {
      return false;
    }
  }
}

C'est fait un peu à l'arrache mais à mon avis il faut chercher dans cette idée de modification d'évènement.
Modérateur
Mouais plutôt que de binder/debinder à tout bout de champ des events: On crée une variable qui stocke l'état.


var isPlaying = false;
function play() {
  if (isPlaying) return;
  isPlaying = true;
  // Lancer la lecture
}
function stop() {
  // Stopper la lecture
  isPlaying = false;
}


C'est plus clean car on gère ça directement sur le déclenchement. Si l'appli devient plus grosse et que plusieurs évènements sont susceptibles de lancer play(), ça ne posera pas de problèmes.

Penser dans ce sens: Le problème n'est pas que le bouton reste clickable, mais que le son puisse se jouer plusieurs fois.