zoukankan      html  css  js  c++  java
  • 通用的tab选项卡

     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({ 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();
  • 相关阅读:
    互联网思维(1)
    互联网思维
    WLAN和WIFI的区别
    ping操作
    一篇关于正则表达式的小结
    javascript正则表达式
    为什么原型继承很重要 – SegmentFault
    JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型
    【转】前端开发文档规范
    我的第一篇博文
  • 原文地址:https://www.cnblogs.com/guanguan-/p/7904328.html
Copyright © 2011-2022 走看看