因爲代碼都有註釋,因此很少加解釋,你們都知道的。直接貼代碼:函數
代碼以下:this
/** * 簡單的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); } } };
頁面上調用方式以下:spa
$(function(){ new Tab().init({ switchTo: 1, callback: function(index){ console.log(index); } }); });