Tengo una tabla con 32 celdas y cada celda tiene la función onclick="music()". Está funcionando bien, excepto una cosa. Quiero que funcione para que cada vez que haga clic en otra celda, la música de la otra celda se detenga.

Mi código JavaScript es:

function music(){
    var t = event.target;
    var sound = new Audio();
    sound.src =  "sound/"+t.title+".mp3";
    sound.play();
}
1
דין ודברים 22 sep. 2019 a las 18:04

3 respuestas

La mejor respuesta

Aquí está la solución que se me ocurre:

var playingMusic = {};
var playMusic = function () {}
  var t = event.target;
  playingMusic["sound/"+t.title+".mp3"] = new Audio();
  sound.src =  "sound/"+t.title+".mp3";
  sound.play();
}
var stopMusic = function (key) { // the key being "sound/"+t.title+".mp3"
  playingMusic[key].stop();
}

Si necesita una explicación sobre algo, ¡pregunte y actualizaré esta respuesta!

0
Jaime Argila 22 sep. 2019 a las 17:29

Puede hacerlo de muchas maneras, una es usar una clase y otra es usar una variable global, por ejemplo. La variable global es más simple, así que lo explico aquí. Primero, declarar una variable en un ámbito global, p. dejar sonar; Entonces su función podría ser así.

    function music(){
      if(sound && !sound.paused() {
        sound.pause();
      }

      var t = event.target;
      var newSound = new Audio();
      newSound.src =  "sound/"+t.title+".mp3";
      newSound.play();
      sound = newSound;
    }
0
Jhm 22 sep. 2019 a las 15:48

Cambie la implementación de su función creando el objeto de sonido una vez.

var sound = undefined;

function music() {
    if (!sound) {
        sound = new Audio();
    } else if(!sound.paused()) {
        sound.pause();
        sound.currentTime = 0; // rewind
    }
    sound.src =  `sound/${event.target.title}.mp3`;
    sound.play();
}
0
Bigabdoul 22 sep. 2019 a las 16:02
58050460