Javascript代码工作不正常(工作一段时间并崩溃)

Javascript代码工作不正常(工作一段时间并崩溃),javascript,Javascript,我已经为文本制作了一个javascript幻灯片,但是在几个循环之后它被窃听了。 这就是它应该是什么样子(不要介意gif中的光标): 这是在几个循环之后发生的情况: Javascript代码: var quote_array = [ "Aš supratau, kad kuo daugiau dirbu,<br/>tuo labiau man sekasi.", "Dirbdamas sau malonų darbą<br/>pasieki tob

我已经为文本制作了一个javascript幻灯片,但是在几个循环之后它被窃听了。 这就是它应该是什么样子(不要介意gif中的光标):

这是在几个循环之后发生的情况:

Javascript代码:

var quote_array = [
    "Aš supratau, kad kuo daugiau dirbu,<br/>tuo labiau man sekasi.",
    "Dirbdamas sau malonų darbą<br/>pasieki tobuliausių rezultatų.",
    "Tikras darbas yra darbas<br/>kurio tu nemėgsti."
    ];
var quoteName_array = [
    "-Tomas Džefersonas",
    "-Aristotelis",
    "-Bilas Watersonas"
    ];
var quote_i = Math.floor(Math.random()*quote_array.length);
var quote_elem;
var quoteName_elem;
var patikrinti
function quoteNext()
{
    quote_i = Math.floor(Math.random()*quote_array.length);
    if(patikrinti==quote_i)
    {
        quoteNext();
    }
    quote_elem.style.opacity = 0;
    quoteName_elem.style.opacity = 0;
    setTimeout("quoteSlide()",1100);
}
function quoteSlide()
{
    patikrinti = quote_i;
    quote_elem.innerHTML = quote_array[quote_i];
    quoteName_elem.innerHTML = quoteName_array[quote_i];
    quote_elem.style.opacity = 1;
    quoteName_elem.style.opacity = 1;
    setTimeout("quoteNext()",13900);
}
var quote\u数组=[
“Ašsupratau,kad kuo daugiau dirbu,
tuo labiau man sekasi。”, “迪尔巴马斯·绍·马龙·达尔布
帕西耶基·托布利奥西·雷祖尔塔。”, “提克拉斯·达尔巴斯·伊拉·达尔巴斯
库里奥·图内姆·格斯蒂。” ]; 变量quoteName_数组=[ “-托马斯·迪泽弗索纳”, “-亚里士多德”, “Bilas Watersonas” ]; var quote_i=Math.floor(Math.random()*quote_array.length); var quote_elem; 变量quoteName_elem; 帕提克林蒂变种 函数quoteNext() { quote_i=Math.floor(Math.random()*quote_array.length); 如果(patikrinti==quote_i) { quoteNext(); } quote_elem.style.opacity=0; quoteName_elem.style.opacity=0; setTimeout(“quoteSlide()”,1100); } 函数quoteSlide() { patikrinti=引用i; quote_elem.innerHTML=quote_数组[quote_i]; quoteName_elem.innerHTML=quoteName_数组[quote_i]; quote_elem.style.opacity=1; quoteName_elem.style.opacity=1; setTimeout(“quoteNext()”,13900); }
一开始我没有看到循环,但在
quoteNext()
中,您(随机)第二次调用
quoteNext()
,这将添加另一个
setTimeout(“quoteSlide()”,1100)
因此随着时间的推移,越来越多的“循环”并行运行,最终导致总的闪烁。将您的函数更改为

function quoteNext() {
    quote_i = Math.floor(Math.random()*quote_array.length);
    if (patikrinti==quote_i) {
        quoteNext(); // try again
    } else { // but do not continue
        quote_elem.style.opacity = 0;
        quoteName_elem.style.opacity = 0;
        setTimeout(quoteSlide, 1100); // pass functions, not code strings
    }
}

你是怎么开始的?看起来它并行运行了几次,我在加载HTML部分(div、blockquote和p元素)后立即启动它。。。quote_elem=document.getElementById(“quote”);quoteName_elem=document.getElementById(“quoteName”);quoteSlide()。。。谢谢你,真的很喜欢你解释一切的方式,理解问题,现在一切都很好:)