Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么带毫秒参数的clearTimeout不起作用?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么带毫秒参数的clearTimeout不起作用?

Javascript 为什么带毫秒参数的clearTimeout不起作用?,javascript,jquery,Javascript,Jquery,我正在构建一个简单的横幅旋转器。事实上,当它在没有按下任何按钮的情况下旋转时,效果很好,但当我按下一些按钮来更改横幅并清除时间时,它就不起作用了 看起来时间不清楚 var tempo = 5000; var elemento; var quantos; var atual; // Inicia $(document).ready(function() {

我正在构建一个简单的横幅旋转器。事实上,当它在没有按下任何按钮的情况下旋转时,效果很好,但当我按下一些按钮来更改横幅并清除时间时,它就不起作用了

看起来时间不清楚

        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");
            
        }
var-tempo=5000;
var elemento;
var quantos;
变量;
//伊尼西亚
$(文档).ready(函数(){
bannerRotator(“destaques”);
});
//乐趣横幅
函数bannerRotator(元素){
//Conta quantos横幅存在:
$('
    ).appendTo(元素); i=0; $(元素)。查找(“.banner”)。每个(函数(){ $(元素).find(“.banner”).eq(i).addClass(“id”+i); 按钮=元素+“ul.按钮”; 酸性=i+1; $(“
  • ”)。附加到(按钮); i++; }); //罗塔科伊尼西亚酒店 elemento=元素; quantos=i; 旋转(i,-1); } 函数getBanner(r){ r=r-1; 旋转(quantos,r); } 功能旋转(i,底座){ clearTimeout(节奏);
    如果(基本您从未将
    节奏设置为计时器!请执行以下操作:

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

    然后将
    timeOutTime
    设置为您希望计时器进入的毫秒数

    您可以使用setTimeout返回的结果清除超时

    var x = setTimeout(functionPointer, 500);
    clearTimeout(x);
    

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

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

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

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

    使用
    setTimeout
    返回将其传递给
    cleartimout
    函数:

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

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

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

    请将
    href=“javascript:getBanner(“+i+”);”
    更改为
    href=“#”onclick=“getBanner(“+i+”);return false”
    我建议您将函数传递给
    setTimeout
    而不是字符串。
    setTimeout(function(){rorate(i,base);},tempo
    @Rocket在某些版本的IET中传递函数而不是字符串失败。这将不起作用。您试图将
    x
    用作局部变量和外部作用域中的函数名。roflz..ty由于我对占位符的错误使用…setTimeout中的x是您的函数调用..编辑了我的后更正;我只是保持了h的格式是原始post,其中字符串作为第一个参数传递。