2011-10-17 29 views
1

我正在使用自動滾動腳本,我正在使用jquery中的函數移動到菜單上的單擊元素。我使用setInterval單擊菜單上的每個項目。直到現在一切正常。但是,當我需要停止setInterval時,問題出現了,我的意思是,如果用戶單擊其中一個元素,請停止setInterval。用戶單擊自動滾動腳本時清除setInterval

我有兩個問題或問題的你要跟

  1. 這是做一個自動滾屏的正確方法?
  2. 如果不是,如果你給我一點線索,我會非常感激。如果這是正確的方法,如何知道點擊事件是由用戶還是腳本觸發的?

好吧。謝謝閱讀。我正在使用的代碼是下一個,正如我所說,正在工作正常,以循環滑動。非常感謝。就像一個旁註:對於客戶請願書,我不能使用jquery插件來創建滑塊,所以我必須手動完成。

$('.slider-controls a').live('click',function(e){ 
      moveSlider($(this).attr('href'),e); 

      return false; 
     }); 

     function moveSlider(toDiv,elem){ 
      var nextPos = $(toDiv).position().top; 
      $('.slider-total').animate({ 
       top: -nextPos 
      }, 700); 

      $('.slider-total div').removeClass('activo'); 
      $(toDiv).addClass('activo'); 
     } 

     var autoSlider = setInterval(function(){ 
      var slideNext; 

      if (!($('.slider-total .activo').next().attr('id'))){ 
       slideNext = '#' + $('.slider-total .post:first').attr('id'); 
      } else { 
       slideNext = '#' + $('.slider-total .activo').next().attr('id'); 
      } 

      $('a[href='+slideNext+']').click(); 
     },4000); 

回答

2

可以通過調用clearInterval()傳遞間隔的id清除間隔,從setInterval()函數返回。在你的情況下,它將是:

clearInterval(autoSlider); 
+0

是的。我知道它實際上停止了我的setInterval。我需要的是當用戶點擊一個項目時停止setInterval。我可以在$('。slider-controls a')中使用clearInterval(autoSlider)。live('click');功能。這裏的問題是腳本本身正在點擊每個項目,所以如果我以這種方式使用它,則滑塊只會動畫到第二個項目。 – Chuy

+0

你的'setInterval'函數直接調用'moveSlider'。然後你可以在'click'事件中清除超時,因爲它來自用戶。總是試圖提取你的邏輯來分離你可以從事件或你的JavaScript調用的方法,而不是「假裝」成爲用戶 –