通用的tab选项卡

时间:2022-04-01 06:26:09

 html

    <div class="tab" js-tab="1">
<div class="tab-title fr">
<a href="javascript:;" class="item col-xs-4 item-cur">产业基本情况</a>
<a href="javascript:;" class="item col-xs-4 ">失效原因分析</a>
<a href="javascript:;" class="item col-xs-4 ">产业区域分布</a>
</div>
<div class="tab-cont tab-content">
<div class="tab-cont__wrap">
<div class="item tab-pane">
<!-- 密集型产业有效失效分析-->
</div>
<div class="item tab-pane"></div>
<div class="item tab-pane"></div>
</div>
</div>
</div>

 JS

;(function ($, window, document, undefined) {
var Plugin = function (elem, options) {
this.$wrapper = elem;
this.$tab_list = this.$wrapper.find('.tab-title').find('.item');
this.$tabCont_wrap = this.$wrapper.find('.tab-cont__wrap');
this.$tab_cont = this.$tabCont_wrap.find('.item');
this.timer = null;
this.playTimer = null
this.iNow = 0;
this.defaults = {
curDisplay:
1,
mouse:
'click',
changeMethod:
'default',
autoPlay:
false
};
this.opts = $.extend({}, this.defaults, options);
};

Plugin.prototype
= {
inital:
function () {
var self = this;
this.setData();
this.tabInital();

if (this.opts.mouse === 'click') {
this.$tab_list.click(function () {
self.changeTab($(
this).index());

self.iNow
= $(this).index();
});
}
else if (this.opts.mouse === 'over') {
this.$tab_list.hover(function () {
var cur_obj = this;

clearTimeout(self.timer);
self.timer
= setTimeout(function () {
self.changeTab($(cur_obj).index());
},
30);

self.iNow
= $(this).index();
},
function () {
clearTimeout(self.timer);
});
}
else {
this.$tab_list.click(function () {
self.changeTab($(
this).index());

self.iNow
= $(this).index();
});
}

if (this.opts.autoPlay) {
clearInterval(
this.playTimer);
this.playTimer = setInterval(function () {
self.autoPlay();
},
1000);

this.$wrapper.hover(function () {
clearInterval(self.playTimer);
},
function () {
self.playTimer
= setInterval(function () {
self.autoPlay();
},
1000);
});
}
},

setData:
function () { // 设置样式
var tabCont_w = this.$tab_cont.width();
var tabCont_h = this.$tab_cont.height();
var tabCont_len = this.$tab_cont.length;

switch(this.opts.changeMethod) {
case 'default' :
this.$tab_cont.css({display: 'none'});
break;
case 'horizontal' :
this.$tabCont_wrap.css({width: tabCont_w * tabCont_len});
this.$tab_cont.css({float: 'left'});
break;
case 'vertical' :
this.$tabCont_wrap.css({height: tabCont_h * tabCont_len});
break;
case 'opacity' :
this.$tab_cont.css({display: 'none'});
break;
default :
this.$tab_cont.css({display: 'none'});
break;
}
},

tabInital:
function () { // 初始化当前显示
var curNum = this.opts.curDisplay - 1;
this.$tab_list.removeClass('item-cur');
this.$tab_list.eq(curNum).addClass('item-cur');

if (this.opts.changeMethod === 'default' || this.opts.changeMethod === 'opacity') {
this.$tab_cont.eq(curNum).css({display: 'block'});
}
else if (this.opts.changeMethod === 'horizontal') {
this.$tabCont_wrap.css({left: -curNum * this.$tab_cont.width()});
}
else if (this.opts.changeMethod === 'vertical') {
this.$tabCont_wrap.css({top: -curNum * this.$tab_cont.height()});
}
else {
this.$tab_cont.eq(curNum).css({display: 'block'});
}

this.iNow = this.opts.curDisplay - 1;
},

changeTab:
function (index) { // 选项卡切换
this.$tab_list.removeClass('item-cur');
this.$tab_list.eq(index).addClass('item-cur');

switch(this.opts.changeMethod) {
case 'default' :
this.$tab_cont.css({display: 'none'});
this.$tab_cont.eq(index).css({display: 'block'});
break;
case 'horizontal' :
this.$tabCont_wrap.stop().animate({left: this.$tab_cont.width() * -index});
break;
case 'vertical' :
this.$tabCont_wrap.stop().animate({top: this.$tab_cont.height() * -index});
break;
case 'opacity' :
this.$tab_cont.stop().fadeOut();
this.$tab_cont.eq(index).stop().fadeIn()
break;
default :
this.$tab_cont.css({display: 'none'});
this.$tab_cont.eq(index).css({display: 'block'});
break;
}
},

autoPlay:
function () { // 自动播放
if (this.iNow === this.$tab_list.length - 1) {
this.iNow = 0;
}
else {
this.iNow ++;
}

this.changeTab(this.iNow);
},

constructor: Plugin
};

$.fn.tab
= function (options) {
var plugin = new Plugin(this, options);

return plugin.inital();
};

})(window.jQuery, window, document);

调用

 $('[js-tab=1]').tab();