2011-10-11 77 views
1

我創建了一個simple plugin tabs plugin for jQuery that can optionally cycle through the various content panesjQuery循環標籤:更好的循環方式?

我覺得我騎自行車的方式非常好(有一點開銷),並且正在尋找一些替代方案來完成它。

少數人的事情,我等等是:

  • 我必須存儲每個選項卡(記憶?)數組
  • 我保持一個迭代器和計數,並執行數學以確定下一個週期

該插件這樣初始化的數組索引:$(selector).jqtabs()$(selector).jqtabs(4000)(4000 =毫秒週期時間)。

任何更好的想法?

(function ($) { 
    $.fn.jqtabs = function (cycleSpeed) { 

     return this.each(function() { 
      var all = this; 
      var cycleIterator = 1; 
      var numberOfTabs = 0; 
      var allTabs; 

      /* Tab Click 
      =====================*/ 
      $(".navigation li", this).click(function() { 
       changeTo(this) 
      }); 

      /* Initiate Cycle 
      =====================*/ 
      if (cycleSpeed) { 
       //array of tabs 
       allTabs = $(".navigation li", all); 
       numberOfTabs = allTabs.length; 

       setInterval(function() { 
        var tabIndex = (cycleIterator % numberOfTabs); 
        var tabToCycle = allTabs[tabIndex]; 
        changeTo(tabToCycle); 
        cycleIterator++; 
       }, cycleSpeed); 
      } 

      /* changeTo(tab) Function 
      =====================*/ 
      var changeTo = function (tab) { 
       if (!$(tab).hasClass("active")) { 
        $(".panel", all).hide(); 
        $("#" + $(tab).attr("title")).fadeIn('fast', function() { 
         $(".active", all).removeClass("active"); 
         $(tab).addClass("active"); 
        }); 
       } 
      }; 
     }); 
    } 
})(jQuery); 

回答

2

而不是保持標籤元素的數組,你可以使用jQuery的next method。如果next不存在,則使用:first代替。

//initialize to first tab 
var tab = $('li:first'); 

//get next tab 
var nextTab = $(tab).next().length ? $(tab).next() : $('li:first'); 
+0

挖三元操作符..我經常忘記,JavaScript支持那些 –