2014-03-27 41 views
-2

我已經爲文本做了一個JavaScript幻燈片,但它在幾個循環後會被竊聽。 這是它應該是什麼樣子(不介意GIF光標):Javascript代碼無法正常工作(適用於一段時間和崩潰)

這是一對夫婦循環後會發生什麼:

的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); 
} 
+0

您是如何開始的?看起來它運行幾個平行 – Bergi

+0

次我之後HTML部分(DIV,塊引用和P元素)啓動加載 ... ... – dnc123

回答

0

我沒有看到第一次發生,但在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 
    } 
} 
+0

謝謝,真的很喜歡你解釋一切的方式,瞭解問題,現在一切正常:) – dnc123