clearTimeout不工作

时间:2011-03-22 20:04:01

标签: javascript jquery

嘿伙计们,我正在建立一个简单的横幅旋转器。事实是,当它旋转而没有按下任何按钮时,工作正常,但是当我按下某个按钮来更改横幅并清除时间时,它不起作用。

看起来时间不清楚。

谢谢!

        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:
            $('<ul class="buttons"></ul>').appendTo(element);
            i = 0;
            $(element).find(".banner").each(function() {
                $(element).find(".banner").eq(i).addClass("id"+i);
                buttons = element+" ul.buttons";
                acId = i+1;
                $('<li><a href="javascript:getBanner('+i+');">'+acId+'</a></li>').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");

        }

6 个答案:

答案 0 :(得分:13)

因为您错误地使用了clearTimeout()。您的代码需要类似于以下内容:

var x = setTimeout("doStuff();", tempo);
clearTimeout(x);

您当前正在使用tempo作为超时句柄,这就是它无效的原因。

答案 1 :(得分:2)

使用setTimeout的回复将其传递给clearTimeout函数:

var timeoutId = setTimeout(callBack, 1000);
//then, later in the code
clearTimeout(timeoutId);

答案 2 :(得分:1)

要使用clearTimeout,您需要将调用返回的值传递给setTimeout

var timeout;
// ...
timeout = setTimeout('rotate('+i+', '+base+');', tempo);
// ...
clearTimeout(timeout);

答案 3 :(得分:0)

您可以使用setTimeout ...

返回的结果清除超时
var x = setTimeout(functionPointer, 500);
clearTimeout(x);

答案 4 :(得分:0)

当你调用setTimeout时,它将返回一个标识符。这就是需要传递给clearTimeout的东西。

答案 5 :(得分:-1)

你永远不会将tempo设为计时器!做:

tempo = setTimeout('rotate('+i+', '+base+');', timeOutTime);

然后将timeOutTime设置为您希望计时器转到的数量