我不确定我的代码在这里出了什么问题,我已经将变量设置为全局但是明确的超时仍然无效。
谢谢你, 开尔文
var myslide = null;
$(document).ready(function () {
var current = null;
$('ul#panel li a').click(function () {
stopAuto();
$('ul#panel li a').removeClass('active');
$(this).addClass('active');
current = $(this).attr('href');
$('#wrapperSlide').clearQueue();
$('#wrapperSlide').scrollTo($(current), 800);
return false;
});
if (current==null)
{
$("ul#panel li").each(function(i){
var counter1 = i+1;
var timer1 = counter1 * 5000;
myslide = setTimeout(function(){
setLoop1(counter1);
},timer1);
});
} else {
$('#wrapperSlide').clearQueue();
return false;
}
});
这些是循环幻灯片图像和停止自动
的功能 function setLoop1(counter)
{
var counter4 = counter;
var myID = $('a#'+counter4).attr('href');
$('ul#panel li a').removeClass('active');
$('a#'+counter4).addClass('active');
$('#wrapperSlide').scrollTo($(myID), 800);
}
//function to stop the auto slide
function stopAuto() {
clearTimeout(myslide);
}
答案 0 :(得分:2)
您为每个单独的<li>
元素启动了这两个计时器:
$("ul#panel li").each(function (i) {
var counter1 = i + 1;
var myID = $('a#' + counter1).attr('href');
setLoop1(counter1, myID);
});
但是,setLoop1()
函数使用相同的两个变量。每个计时器与其他计时器不同,每次调用时setTimeout()
的返回值都是不同的值。你不能在一个简单的变量中存储一堆不同的数字。
您应该做的是将计时器存储在每个<li>
元素的jQuery“data”属性中。然后你的“点击”处理程序可以从那里取消超时。或者,您可能不需要为每个列表项单独使用一对计时器函数。
答案 1 :(得分:0)
我可以看到两种情况,或者没有调用 stopAuto()函数,或者如果正在调用它, stopAuto()函数是未定义的什么时候叫它。所以我建议在调用之前定义 stopAuto()函数,并使用一些调试工具来查看控制台。