2011-06-17 35 views
1

我有一个内容滑块脚本中的现有功能,它为下一张幻灯片设置超时动画。我想停止mouseover上的动画(我评论了我对脚本的补充)。我究竟做错了什么?谢谢你的帮助。setTimeout,clearTimeout jQuery

function autoSlide() { 
     if (navClicks == 0 || !settings.autoSlideStopWhenClicked) { 
      if (currentPanel == panelCount) { 
       var offset = 0; 
       currentPanel = 1; 
      } else { 
       var offset = - (panelWidth*currentPanel); 
       currentPanel += 1; 
      }; 
      alterPanelHeight(currentPanel - 1); 
      // Switch the current tab: 
      slider.siblings('.coda-nav').find('a').removeClass('current').parents('ul').find('li:eq(' + (currentPanel - 1) + ') a').addClass('current'); 
      // Slide: 



      $('.panel-container', slider).animate({ marginLeft: offset }, settings.slideEaseDuration, settings.slideEaseFunction); 

      setTimeout(autoSlide,settings.autoSlideInterval); 

    // this is my addition to try to stop the animation:    
      $('.panel-container', slider).mouseover(function(){ 
      //alert("hi"); 
       clearTimeout(autoSlide); 

      }).mouseleave(function(){ 

       setTimeout(autoSlide,settings.autoSlideInterval); 

      }); 
    // end of my addition   

     }; 
    }; 
+0

有什么问题? – SLaks

+0

它不起作用... – user803592

+0

如果它仍然不能正常工作(当您真正看到发生了什么时,它会更容易),您可以发布[jsFiddle](http://jsfiddle.net)演示。 – kapa

回答

3

clearTimeout()作品与setTimeout()返回值(用于操作的ID),所以你应该保存它,当你设置它,并利用它来进行明确。

var x=setTimeout(autoSlide,settings.autoSlideInterval); 
... 
clearTimeout(x); 

  • MDC on clearTimeout

    window.clearTimeout(timeoutID)

    其中 timeoutID是超时的ID,你 希望清除,由 window.setTimeout为返回( )。

0

autoSlide不超时,这是你的函数名,所以你不能清除它的超时。 setTimeout返回您需要捕获的超时参考,并在此处调用clearTimeout。见下面的代码:

var slideTimeout = setTimeout(autoSlide,settings.autoSlideInterval); 


$('.panel-container', slider).mouseover(function(){ 
    clearTimeout(slideTimeout); 
}).mouseleave(function(){ 
    slideTimeout = setTimeout(autoSlide,settings.autoSlideInterval); 
}); 
+0

谢谢。这似乎是有道理的,但:(但它没有工作,现在幻灯片滑入和滑出的速度非常快。奇怪。 – user803592

+0

尝试将slideTimeout的声明移到函数之外或将其分配给窗口对象:' window.slideTimeout'。它可能不应该在函数内部声明,这是我的错。 – Endophage

+0

是的,我实际上尝试过自己,但它并没有帮助。有趣的是,只需设置变量(在函数内部或外部) ,使得幻灯片真的很快来回,肯定还有别的不对劲。 – user803592

相关问题