8 votes

Pourquoi clearTimeout avec l'argument millisec ne fonctionne pas ?

Je suis en train de construire un simple rotateur de bannières. Le fait est que, lorsqu'il tourne sans qu'aucun bouton ne soit pressé, il fonctionne bien, mais lorsque j'appuie sur un bouton pour changer la bannière et effacer l'heure, il ne fonctionne pas.

On dirait que l'heure n'est pas claire.

        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");

        }

-2voto

Neal Points 68710

Tu n'as jamais mis tempo comme une minuterie ! faire :

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

Ensuite, fixez timeOutTime comme le nombre de ms que vous voulez que le timer passe à

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X