此代碼隨機播放音頻元素。兩次運行setup
可以讓你用兩個不同的陣列同時做到這一點,這正是我想要的。問題是#stop
只能停止其中一個陣列的播放。這實際上也會發生,如果你只在一個陣列上調用setup
,但不止一次點擊#start
(我也不想)。我認爲這與'intervalReturn'有關,因爲它只會被指定爲一個setInterval
。帶一個功能的多setIntervals(Javascript)
我應該如何編寫這個程序,以便多個調用setup
創建可以只啓動一次的不同setIntervals?另外,如果我應該從完全不同的角度來看待這個問題,會更好嗎?
編輯:這是根據以下建議修復的。但我想知道,在setInterval的「引擎蓋下」是怎麼回事?爲什麼這種行爲會發生? (具體做法是:#stop
停止一個但不是所有的音頻內容。)
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'變量不能同時保存兩個不同的值! - 嘗試移動'var intervalReturn = null'作爲'function setup'中的第一行 –
請參閱編輯評論? –
*「這個...也會發生,如果你......點擊#開始多次。」 - 這是你想要做的事嗎?或者,在再次點擊開始之前,用戶是否必須停止前一個? – nnnnnn