我是編碼新手,我想用HTML,CSS和Javascript構建文本冒險遊戲。我想在每個文本之間顯示一定數量的文本。我嘗試了不同的方法,以避免由於setTimeout造成的無限循環,但我沒有弄清楚如何將其應用於我的代碼。'while'內的setTimeout導致瀏覽器崩潰。我怎樣才能避免它?
這裏是我的代碼,這導致崩潰:
var iCounterText = 0;
var verzog = function() {
document.getElementById('toggleText').insertAdjacentHTML('beforeBegin', '<br>--------------<br>');
document.getElementById('toggleText').insertAdjacentHTML('beforeBegin', part1[iCounterText]);
iCounterText = iCounterText + 1;
playaudio();
}
function forwardingLinks() {
while (iCounterText < part1.length - 1) {
setTimeout(verzog, 500); // Here is the problem //
}
document.getElementById('buttonLinks').innerHTML = part1[part1.length - 1];
}
下面的代碼工作正常,但再有就是文本之間沒有超時:
function forwardingLinks() {
while (iCounterText < part1.length - 1) {
verzog();
}
document.getElementById('buttonLinks').innerHTML = part1[part1.length - 1];
}
編輯: 這是我用「setInterval」創建的新代碼。問題:值加1,但函數不使用part2數組。相反,它再次使用part1 Array,但partvalue已經包含part2數組。
var part1 = [ //Texte und Antworten
'Hallo?',
'Test?',
'What',
'hello',
'--------------',
'Was?'
];
var part2 = [ //Texte und Antworten
'part2 goes on....',
'bla bla',
'blablabla'
];
var iCounterText = 0;
var value = 1;
var partvalue = eval("part" + value);
function forwardingLinks() {
var verzog = setInterval(function(){
if(iCounterText < partvalue.length-2){
++iCounterText;
toggleText.insertAdjacentHTML('beforeBegin', '<br>--------------<br>');
toggleText.insertAdjacentHTML('beforeBegin', partvalue[iCounterText]);
playaudio();
}else{
buttonLinks.innerHTML = partvalue[partvalue.length-1];
++value;
iCounterText=0;
clearInterval(verzog);
}
},500);
}
您不會在'while循環中更改'iCounterText',那麼循環如何停止?在超時函數運行之前,您不要更改它,但直到退出循環纔會發生這種情況。 – Barmar
使用'setInterval'每500毫秒運行一次函數。當計數器達到限制時,它應該調用'clearInterval'來自行停止。 – Barmar
您也可以嘗試在添加的元素上添加轉換時間,而不是暫停 – ryan