9

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

时间好像不清楚。

var速度=5000;var元素;var量子;变种;//Inicia公司$(文档).ready(函数){bannerRotator(“#destaques”);});//趣味横幅功能横幅旋转器(元素){//存在Conta quantos横幅:$('<ul class=“buttons”></ul>').appendTo(element);i=0;$(element).find(“.banner”).each(function()){$(element).find(“.banner”).eq(i).addClass(“id”+i);buttons=元素+“ul.buttons”;acId=i+1;$('<li><a href=“javascript:getBanner('+i+');”>'+acId+'</a></li>').appendTo(按钮);i++;});//Incia轮唱elemento=元素;量子=i;旋转(i,-1);}函数getBanner(r){r=r-1;旋转(quantos,r);}函数旋转(i,基数){清除超时(速度);if(基础<i-1){base++;atual=基础;setTimeout('旋转('+i+','+base+');',节奏);}其他{基数=0;atual=基础;setTimeout('旋转('+i+','+base+');',节奏);}//Faz os淡出$(elemento).find(“.banner”).animate({不透明度: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”);}
  • 2
    请换一下href=“javascript:getBanner('+i+');”href=“#”onclick=“getBanner('+i+');return false” 评论 2011年3月22日20:07
  • 我建议您将函数传递给设置超时而不是字符串。setTimeout(function(){rorate(i,base);},tempo); 评论 2011年3月22日20:09
  • @在某些版本的IE中,Rocket传递函数而不是字符串失败 评论 2011年3月22日20:21

6个答案6

重置为默认值
23

因为你正在使用清除超时()错误地。您的代码需要类似于以下内容:

var x=设置超时(“doStuff();”,速度);清除超时(x);

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

1
  • 对的;我只是在保持他的原始帖子的状态,其中传递了一个字符串作为第一个参数。 评论 2011年3月28日20:23
4

使用来自的回报设置超时将其传递给清除超时功能:

var timeoutId=设置超时(回调,1000);//然后,在代码的后面清除超时(timeoutId);
2

使用清除超时您需要将调用返回的值传递给设置超时.

var超时;// ...timeout=setTimeout('旋转('+i+','+base+');',节奏);// ...clearTimeout(超时);
0

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

0

使用setTimeout返回的结果清除超时。。。

var x=设置超时(函数指针,500);清除超时(x);
2
  • 1
    这行不通。你正在尝试使用x个作为局部变量和外部作用域中函数的名称。 评论 2011年3月22日20:08
  • 罗夫兹。。对我不当使用占位符表示歉意。。。setTimeout中的x是您的函数调用。。编辑了我的帖子 评论 2011年3月28日19:16
-2

你从未设定速度作为计时器!执行:

tempo=setTimeout('旋转('+i+','+base+');',超时);

然后设置timeOutTime(超时)作为您希望计时器进入的毫秒数

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.