/*
* ====== 功能简单的选项卡插件 =====
* author: Jim
* QQ: 307083215
* version: 3.5 | 2013.12.26
* =================================
*/
/*---------------------------------
使用示例:
$(".tab").tab({
card: ".tab-card",
panel: ".tab-panel",
highlight: "tab-curCard", // 注意:类名不带"."
// 切换成功后执行回调函数, 参数:当前的pannel 和 它在同辈中的索引位置
callback: function(panel, index){
//这里的this指向 .tab对象
var img = panel.find('img');
var src = img.attr('src'),
source = img.data('src');
src !== source && img.attr('src', source);
// do more...
}
});
--------------------------------------*/
;(function($){
$.fn.tab = function(options){
var settings = $.extend({
card: ".tab-card",
panel: ".tab-panel",
eType: "mouseover",
highlight: "tab-curCard",
speed: 0,
callback: function (curPanel, index, curCard) { }
}, options || {});
this.each(function(){
var tab = $(this),
card = $(settings.card).filter(function(i){
return !!$(this).closest(tab).length;
}),
panel = $(settings.panel).filter(function(i){
return !!$(this).closest(tab).length;
}),
done = true; // 切换完成与否
card[settings.eType](function(){
if ( !done || $(this).hasClass(settings.highlight) )
return;
tab.trigger('tabChange', $(this).index());
});
tab.on('tabChange', function(e, i){ // 自定义事件
done = false;
var curCard = card.eq(i),
curPanel = panel.eq(i);
card.filter('.' + settings.highlight).removeClass(settings.highlight);
curCard.addClass(settings.highlight);
panel.filter(':visible').fadeOut(settings.speed, function(){
curPanel.fadeIn(settings.speed, function(){
settings.callback.apply(tab, [curPanel, i, curCard]);
done = true;
});
});
});
});
return this;
};
})(jQuery);
//推荐的html结构
// <div class="tab">
// <ul class="tab-nav">
// <li class="tab-card tab-curCard"><a href="javascript:;">card1</a></li>
// <li class="tab-card"><a href="javascript:;">card2</a></li>
// <li class="tab-card"><a href="javascript:;">card3</a></li>
// </ul>
// <div class="tab-cont">
// <div class="tab-panel" style="display: block;">panel1</div>
// <div class="tab-panel" style="display: none;">panel2</div>
// <div class="tab-panel" style="display: none;">panel3</div>
// </div>
// </div>