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横幅存在:
$('
如果(基本您从未将节奏设置为计时器!请执行以下操作:
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,其中字符串作为第一个参数传递。
).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(节奏);