2017-07-13 13 views
1

私は次のJavaScriptコードを使用クリックしたときに再生する複数のオーディオファイルがあります。複数のオーディオファイルは、一度にプレイするだけのために必要な

関数playSound(エル、サウンドファイルを){

  if (el.mp3) { 
       if(el.mp3.paused) el.mp3.play(); 
       else el.mp3.pause(); 
      } else { 
       el.mp3 = new Audio(soundfile); 
       el.mp3.play(); 
      } 
     } 

2つをクリックすると、両方のオーディオファイルが同時に再生されるという問題があります。 2番目のボタンをクリックすると、最初のオーディオファイルが再生を停止する必要があります。

このコードに何を追加する必要がありますか?

+0

たとえば、「audioElements」というグローバル配列を作成し、サウンドを再生するときにその中に要素を配置します。他のすべてを一時停止するには、アレイをループして一時停止してください。 –

+0

あなたはコード – Sal

答えて

0

私はまだHTML5のサウンドAPIを使用していないので、これは私の要点を理解することです。

私がコメントしたように、すべての要素をグローバル配列に追加して、そのように一時停止することができます。

var audio = []; 

    function playSound(el,soundfile) { 

    // Pause all 

    if (el.mp3) { 
      if(el.mp3.paused) { 
       // Pause all sounds 
       pauseAllSounds(); 

       el.mp3.play(); 

       // Add the sound to the audio array 
       audio.push(el); 

       // You should probably clean up the audio array too, 
       // so no two identical audio files exists in the array, 
       // but that's up to you! :) 
      } 
      else el.mp3.pause(); 
     } else { 
      el.mp3 = new Audio(soundfile); 
      el.mp3.play(); 
     } 
    } 

    function pauseAllSounds(){ 
    audio.forEach(function(el){ 
     if(!el.mp3.paused) el.mp3.pause(); 
    }); 
    } 
+0

を助けることができるので、私は今、配列のようなオーディオファイルを追加するだけです:var audio = [sound1.mp3、sound2.mp3]; – Sal

+0

はい、ただしファイルの名前はありません。しかし、要素の前の 'playSound'関数に要素を渡したように、むしろ要素への '参照'。 –

+0

私はちょっと混乱しています – Sal

関連する問題