2011-10-11 42 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支持那些 –