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: $('
    ').appendTo(element); i = 0; $(element).find(".banner").each(function() { $(element).find(".banner").eq(i).addClass("id"+i); buttons = element+" ul.buttons"; acId = i+1; $('
  • '+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"); }

    因为你错误地使用了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数