由於程式碼都有註釋,所以不多加解釋,大家都知道的。直接貼程式碼:
程式碼如下:
/** * 簡單的Tab切換 * 支援可配置項 如下引數 */ function Tab(){ this.config = { type : 'mouseover', //型別 預設為滑鼠移上去 autoplay : true, // 預設為自動播放 triggerCls : '.list', // 選單項 panelCls : '.tabContent', // 內容項 index : 0, // 當前的索引0 switchTo : 0, // 切換到哪一項 interval : 3000, // 自動播放間隔時間 預設為3 以s為單位 pauseOnHover : true, // 滑鼠放上去是否為暫停 預設為true current : 'current', // 當前項新增到類名 hidden : 'hidden', // 類名 預設為hidden callback : null // callback函式 }; this.cache = { timer : undefined, flag : true }; } Tab.prototype = { init: function(options){ this.config = $.extend(this.config,options || {}); var self = this, _config = self.config; self._handler(); }, _handler: function(){ var self = this, _config = self.config, _cache = self.cache, len = $(_config.triggerCls).length; $(_config.triggerCls).unbind(_config.type); $(_config.triggerCls).bind(_config.type,function(){ _cache.timer && clearInterval(_cache.timer); var index = $(_config.triggerCls).index(this); !$(this).hasClass(_config.current) && $(this).addClass(_config.current).siblings().removeClass(_config.current); $(_config.panelCls).eq(index).removeClass(_config.hidden).siblings().addClass(_config.hidden); // 切換完 新增回撥函式 _config.callback && $.isFunction(_config.callback) && _config.callback(index); }); // 預設情況下切換到第幾項 if(_config.switchTo) { $(_config.triggerCls).eq(_config.switchTo).addClass(_config.current).siblings().removeClass(_config.current); $(_config.panelCls).eq(_config.switchTo).removeClass(_config.hidden).siblings().addClass(_config.hidden); } // 自動播放 if(_config.autoplay) { start(); $(_config.triggerCls).hover(function(){ if(_config.pauseOnHover) { _cache.timer && clearInterval(_cache.timer); _cache.timer = undefined; }else { return; } },function(){ start(); }); } function start(){ _cache.timer = setInterval(autoRun,_config.interval); } function autoRun() { if(_config.switchTo && (_config.switchTo == len-1)){ if(_cache.flag) { _config.index = _config.switchTo; _cache.flag = false; } } _config.index++; if(_config.index == len) { _config.index = 0; } $(_config.triggerCls).eq(_config.index).addClass(_config.current).siblings().removeClass(_config.current); $(_config.panelCls).eq(_config.index).removeClass(_config.hidden).siblings().addClass(_config.hidden); } } };
頁面上呼叫方式如下:
$(function(){ new Tab().init({ switchTo: 1, callback: function(index){ console.log(index); } }); });