0

我不确定我的代码有什么问题,我已经设置了全局变量,但是清除超时在这里仍然不起作用。

谢谢你,开尔文

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);
}
4

2 回答 2

2

您正在为每个单独的<li>元素启动这两个计时器:

    $("ul#panel li").each(function (i) {
        var counter1 = i + 1;
        var myID = $('a#' + counter1).attr('href');
        setLoop1(counter1, myID);
    });

但是,该setLoop1()函数使用相同的两个变量。每个计时器都与其他计时器不同setTimeout(),并且每次调用它时from 的返回值都是不同的值。您不能将一堆不同的数字存储在一个简单的变量中。

您应该做的是将计时器存储在每个<li>元素的 jQuery“数据”属性中。然后你的“点击”处理程序可以取消超时。或者,也许您不需要为每个列表项设置一对单独的计时器函数。

于 2012-10-11T04:56:55.863 回答
0

如我所见,这里可能有两种情况,要么stopAuto()函数没有被调用,要么如果它被调用,则stopAuto()函数在被调用时是未定义的。所以我建议在调用它之前定义stopAuto()函数并使用一些调试器工具来查看控制台。

于 2012-10-11T04:53:43.193 回答