Javascript 简单循环JQuery
我知道这已经被问了好几次了,但我就是不明白。 因此,情况如下:Javascript 简单循环JQuery,javascript,jquery,html,loops,setinterval,Javascript,Jquery,Html,Loops,Setinterval,我知道这已经被问了好几次了,但我就是不明白。 因此,情况如下: $ = jQuery; var loop = function() { $('#content').delay(800).css('background-color', "#B24296"); $('#content').delay(1600).css('background-color', "#AEB404"); $('#content').delay(2400).css('background-c
$ = 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();
此设置为我提供了一个“未捕获范围错误:超过最大调用堆栈大小”
我也试过:
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);
在您的第一次尝试中,函数loop()会无限次地调用自身,从而导致您报告的错误 至于为什么css/delay组合不起作用,根据这个答案:delay()与动画fx队列一起工作,对css()调用没有影响 同样,根据中的解决方案,这里是您的用例()的工作代码:
第一个是无限循环。尾部递归:您也不能在
.css()
上执行.delay()
。。。它只是跳到了结尾。首先,谢谢你。第二,这会改变颜色三次,但只有一次,但实际上我希望它像一个不受干扰的循环一样一次又一次地改变,但不会导致错误,您可以添加setTimeout(循环,500)代码>在第三次调用next()以实现此结果之前。我将对我答案中的代码进行编辑。非常感谢!这是我理解的第一个解决方案!没问题,我很高兴这有帮助!
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();
});