【发布时间】:2014-08-14 03:34:32
【问题描述】:
我构建了一个简单的 jQuery 动画,它使用递归来重复一个函数,该函数会无休止地一遍又一遍地运行动画。它可以工作并且看起来很酷,但是在控制台中它会抛出错误:“Uncaught RangeError: Maximum call stack size exceeded”...是否有另一种方法可以在不使用递归的情况下完成无限动画循环或另一种方法 CSS3 或基于 jQuery 的解决方案可能不会使浏览器抛出错误?
这是 jsfiddle 的工作代码:http://jsfiddle.net/flatiron_school/0busdnv7/5/
如果你讨厌 jsfiddle,下面是包含的代码:
<a>1</a> <a>2</a> <a>3</a> <a>4</a> <a>5</a>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script>
<script>
var $a1 = $('a').eq(0),
$a2 = $('a').eq(1),
$a3 = $('a').eq(2),
$a4 = $('a').eq(3),
$a5 = $('a').eq(4),
links = [$a1,$a2,$a3,$a4,$a5];
delays = [100,200,300,400,500];
function colorChange() {
for (i=0; i < links.length; i++) {
var $el = links[i],
amount = delays[i];
$el.delay(amount).animate({'background-color': 'rgb(255,80,72)'},400);
$el.delay(amount).animate({'background-color': 'rgb(64,80,44)'},400);
$el.delay(amount).animate({'background-color': 'rgb(176,24,98)'},400);
$el.delay(amount).animate({'background-color': 'rgb(42,157,200)'},400);
}
colorChange();
}
colorChange();
</script>
任何帮助表示赞赏。干杯!
【问题讨论】:
-
因为您在
colorChange内部调用colorChange.. 它会创建一个无限深度堆栈.. 这会导致错误 -
我真的不明白您要做什么...但是要修复错误,您可以在
colorChange中设置超时,例如setTimeout(colorChange, 1);- jsfiddle.net/arunpjohny/yw7g6xac/1 -
你能定义你要找的动画吗?
-
啊这工作 Arun P. 谢谢!使用 setTimeout(colorChange, 1) 显然有足够的时间不会出现堆栈错误。我在这里使用 Aruns 策略更新了代码:jsfiddle.net/flatiron_school/0busdnv7/6
-
但我还是觉得可以写得更好...我们可以看看你是否可以定义你正在寻找的动画...你现在的策略会吃掉很多系统资源,因为它不断执行方法
colorChange
标签: jquery jquery-ui recursion jquery-animate