clearTimeout无法正常工作
嘿伙计们,我正在建立一个简单的横幅旋转器。 事实是,当它旋转而没有按下任何按钮时,工作正常,但是当我按下某个按钮来更改横幅并清除时间时,它不起作用。
看起来时间不清楚。
谢谢!
var tempo = 5000; var elemento; var quantos; var atual; // Inicia $(document).ready(function() { bannerRotator("#destaques"); }); // Funções do Banner function bannerRotator(element) { // Conta quantos banners existem: $(''+acId+' ').appendTo(buttons); i++; }); // Inicia a rotacao elemento = element; quantos = i; rotate(i,-1); } function getBanner(r) { r = r-1; rotate(quantos, r); } function rotate(i, base) { clearTimeout(tempo); if (base<i-1) { base++; atual = base; setTimeout('rotate('+i+', '+base+');', tempo); } else { base = 0; atual = base; setTimeout('rotate('+i+', '+base+');', tempo); } // Faz os fades $(elemento).find(".banner").animate({opacity: 0,}); $(elemento).find(".banner").eq(base).animate({opacity: 1,}); // Arruma os botoes $(elemento).find("ul.buttons li").removeClass("active"); $(elemento).find("ul.buttons li").eq(base).addClass("active"); }
').appendTo(element); i = 0; $(element).find(".banner").each(function() { $(element).find(".banner").eq(i).addClass("id"+i); buttons = element+" ul.buttons"; acId = i+1; $('
因为你错误地使用了clearTimeout()
。 您的代码需要类似于以下内容:
var x = setTimeout("doStuff();", tempo); clearTimeout(x);
您当前正在使用tempo
作为超时句柄,这就是它无法正常工作的原因。
使用setTimeout
的返回值将其传递给clearTimeout
函数:
var timeoutId = setTimeout(callBack, 1000); //then, later in the code clearTimeout(timeoutId);
要使用clearTimeout
您需要将调用返回的值传递给setTimeout
。
var timeout; // ... timeout = setTimeout('rotate('+i+', '+base+');', tempo); // ... clearTimeout(timeout);
当你调用setTimeout时,它将返回一个标识符。 这就是需要传递给clearTimeout的东西。
您使用setTimeout返回的结果清除超时…
var x = setTimeout(functionPointer, 500); clearTimeout(x);
你永远不会把tempo
设定为计时器! 做:
tempo = setTimeout('rotate('+i+', '+base+');', timeOutTime);
然后将timeOutTime
设置为您希望计时器转到的ms数