在iKeyless.widget.Rotator.rotate();
内调用init();
函数时,我的旋转横幅脚本会抛出“太多递归”错误。我无法弄清楚为什么,init();
只被调用一次,并且在第二次调用时有一个defer()....当页面加载它时滞后于“过多的递归”
return {
init: function () {
ui.container = $("#rotating-banner");
ui.thumbs = $("#rotating-banner .tabs .tab");
ui.banners = $("#rotating-banner .banner");
ui.fadeBox = $(".rotate .bd .fade-box");
ui.thumbs.each(function (idx, el) {
$(el).click(function () {
paused = true;
iKeyless.widget.Rotator.rotate.show(idx);
});
});
iKeyless.widget.Rotator.rotate();
},
show: function (idx) {
ui.fadeBox.css("display", "block");
ui.fadeBox.animate({
opacity: 1
},
.125,
function () {
$('.active', $(ui.banners[idx]).addClass('active').parent()).removeClass('active');
ui.fadeBox.animate({
opacity: 1
},
.125,
function () {
ui.fadeBox.css("display", "none");
});
});
},
rotate: function () {
if (!paused) {
this.show(counter);
counter = counter + 1;
if (counter === ui.thumbs.length) {
counter = 0;
}
iKeyless.widget.Rotator.rotate().defer(5000);
}
}
}
答案 0 :(得分:1)
我认为问题是你需要这样做
iKeyless.widget.Rotator.rotate.defer(5000);
而不是
iKeyless.widget.Rotator.rotate().defer(5000);
Source:编写rotate()时,执行函数rotate
,然后执行defer
。当您编写rotate.defer()时,您将获得函数rotate
,并使用在函数上定义的方法defer
。
另外,如果这是jQuery,你如何推迟定义?我不确定jQuery是否提供了延迟功能。如果这是Prototype,我认为defer不会采用任何参数。也许你想要delay
。延迟需要几秒钟的时间,所以你想要(假设5秒,而不是5000秒):
iKeyless.widget.Rotator.rotate.delay(5);
答案 1 :(得分:0)
我不知道延迟,但我读到的是:
安排解释程序空闲后立即运行该函数。
但这并不意味着它实际上并没有这样做。函数rotate一次又一次地调用自身。不是线性的,而是在内部,所以你永远不会结束'顶部'调用旋转。
这意味着无限递归,所以我对这个错误并不感到惊讶。
答案 2 :(得分:0)
我不熟悉defer()
,但您在旋转方法中调用rotate()
,这是递归的来源。也许利用setTimeout
或setInterval
之类的东西可以解决您的问题?