このコードは、オーディオ要素をランダムに再生します。 setup
を2回実行すると、2つの異なるアレイでこれを同時に実行することができます。これは私が望むものです。問題は、#stop
は、再生中の配列の1つだけを停止することです。これは実際には、setup
を1つの配列に呼び出すだけで、#start
を2回以上クリックすると発生します(これも望ましくありません)。私はこれが1つのsetInterval
にしか指定されないので、これが 'intervalReturn'と関係していると考えます。複数のsetIntervalsと1つの関数(Javascript)
setup
の複数の呼び出しで一度だけ起動できる個別のsetIntervalsが作成されるようにするにはどうすればよいですか?
これとは全く別の角度からアプローチしなければならない場合は、どうすればよいでしょうか?
編集:これは以下の提案で修正されました。しかし、私は不思議に思っています、ここでsetIntervalを使って "ボンネットの下で"何が起こっているのですか?なぜこの現象はまったく起こりますか? (具体的に:。#stop
は1を停止しますが、すべてではないオーディオの要素)
var CMajor3 = new Array ("C3","D3","E3","F3","G3","A3","B3","C4a");
var CMajor4 = new Array ("C4b","D4","E4","F4","G4","A4","B4","C5");
var intervalReturn = null;
function pickAndPlay(pitchSet){
fyshuffle (pitchSet); // the Fischer-Yates shuffle function
var tone = document.getElementById(pitchSet[0]);
tone.currentTime = 0;
tone.play();
};
function setup(time, pitchSet){
$("#start").click(function() {
console.log("startClicked");
intervalReturn = window.setInterval(pickAndPlay, time, pitchSet)
});
$("#stop").click(function() {
console.log("stopClicked");
window.clearInterval(intervalReturn)
});
};
$(document).ready(function() {
setup(2000, CMajor3);
setup(2000, CMajor4);
});
問題は、単一の 'intervalReturn'変数が2つの異なる値を同時に保持できないことです。 - 'var intervalReturn = null'を' function setup'の最初の行に移動してみてください –
コメントを編集する参照してください? –
* "これは、あなたが#startを2回以上クリックした場合にも起こります。" * - あなたができることを何かしたいのですか?または、ユーザーがもう一度開始をクリックする前に前のものを停止する必要がありますか? – nnnnnn