2013-10-28 158 views
0

我知道這已被問了好幾次,但我只是不明白。 因此,這裏的情況:簡單循環JQuery

$ = jQuery; 
    var loop = function() { 
    $('#content').delay(800).css('background-color', "#B24296"); 
    $('#content').delay(1600).css('background-color', "#AEB404"); 
    $('#content').delay(2400).css('background-color', "#04B404"); 
    loop(); 
} 
$(document).ready(function() { 
    loop(); 

這個設置給了我一個「未捕獲的RangeError:最大調用堆棧大小超出」 我也試過這樣:

var loop = function() { 
    $('#content').delay(800).css('background-color', "#B24296", function() { 
     $('#content').delay(1600).css('background-color', "#AEB404", function() { 
      $('#content').delay(2400).css('background-color', "#04B404"); 
     }); 
    }); 
} 
$(document).ready(function() { 
    setInterval(loop,3200); 

有了這個代碼,只有第一個顏色變化發生但其餘的不會。 所以,不幸的是,這些都不能簡單地改變背景顏色的工作......有誰知道一個解決方案,或可以解釋爲什麼非工程?

編輯: 設法得到它像這樣工作:

function color(t) { 
    $("div").delay(t*1).queue(function(n) { 
     $('#green').css('background-color', "#B24296"); 
     n(); 
    }); 

    $("div").delay(t*2).queue(function(n) { 
     $('#green').css('background-color', "#AEB404");  n(); 
    }); 

    $("div").delay(t*3).queue(function(n) { 
     $('#green').css('background-color', "#04B404"); 
     n(); 
    }); 
    setTimeout(function() { 
     color(500); 
    }, 500); 
} 

color(500); 
+0

第一個是一個無限循環。 – epascarello

+0

尾遞歸:http://en.wikipedia.org/wiki/Tail_recursion – melancia

+2

你也不能在'.css()'上執行'.delay()'...它只是跳轉到最後 – PlantTheIdea

回答

2

在你的第一次嘗試,功能環路()調用本身導致您報告的錯誤無數次的量。

至於爲什麼css /延遲組合不起作用,按照這個答案:Using jQuery delay() with css() delay()與動畫fx隊列一起工作,並且對css()調用沒有影響。

再次在每對Using jQuery delay() with css()解決方案,在這裏工作的代碼你的使用情況(http://jsfiddle.net/mmSVF/3/):

var loop = function() { 
    $('#content').delay(800).queue(function(next){ 
     $(this).css('background-color', "#B24296"); 
     next(); 
    }).delay(1600).queue(function(next){ 
     $(this).css('background-color', "#AEB404"); 
     next(); 
    }).delay(2400).queue(function(next){ 
     $(this).css('background-color', "#04B404"); 
     setTimeout(loop, 500); 
     next(); 
    }); 
} 

$(function(){ 
    loop(); 
}); 
+0

首先,謝謝您。第二,這改變了顏色三次,但只是一次,但我真的希望它一遍又一遍地改變像一個無限循環,但不會導致錯誤 –

+0

你可以在第三次調用之前添加'setTimeout(loop,500);'到next()來實現這個結果。我會在我的答案中對此代碼進行編輯。 – Cam

+0

非常感謝!這是我理解的第一個解決方案! –