封装jQuery插件实现TAB切换

先上效果图:

直接上代码:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
    <script src='jquery.js'></script>
    <script src='tab.js'></script>
    <style>
        *{margin:0px;padding:0px;background-color: #757575}
        .tab{margin-left: 100px;margin-top: 100px;height: 250px;}
        .tab .tab-ul{height: 30px;}
        .tab .tab-ul .tab-li{float:left;margin-right: 5px;list-style: none; background-color: #323232;color: #fff;display: block;width: 50px;border-radius: 5px 5px 0 0 ;text-align: center;cursor: pointer;}
        .tab .tab-ul .active{color: #323232;  background-color: #fff;}
        .tab .content-warp{width: 200px;height: 200px;background-color: #fff;overflow: hidden;padding:5px;}
        .tab .content-warp .content{width: 200px;height: 200px;display: none}
        .tab .content-warp .content img{width:100%;height: 100%;}
        .tab .content-warp .current{display: block}
    </style>
</head>
<body>
    <div class="tab" data-config='{
            "event":"click",
            "time":false,
            "type":"default"
        }'>
        <ul class="tab-ul">
            <li class="tab-li active">新闻</li>
            <li class="tab-li">热点</li>
            <li class="tab-li">军事</li>
            <li class="tab-li">社会</li>
        </ul>
        <ul class="content-warp">
            <li class="content current"><img src="img/1.jpg"></li>
            <li class="content"><img src="img/2.jpg"></li>
            <li class="content"><img src="img/3.jpg"></li>
            <li class="content"><img src="img/4.jpg"></li>
        </ul>
    </div>

    <div class="tab" data-config='{
            "event":"mouseover",
            "time":false,
            "type":"fade"
        }'>
        <ul class="tab-ul">
            <li class="tab-li active">新闻2</li>
            <li class="tab-li">热点2</li>
            <li class="tab-li">军事2</li>
            <li class="tab-li">社会2</li>
        </ul>
        <ul class="content-warp">
            <li class="content current"><img src="img/1.jpg"></li>
            <li class="content"><img src="img/2.jpg"></li>
            <li class="content"><img src="img/3.jpg"></li>
            <li class="content"><img src="img/4.jpg"></li>
        </ul>
    </div>

    <div class="tab" data-config='{
            "event":"click",
            "time":3000,
            "type":"fade"
        }'>
        <ul class="tab-ul">
            <li class="tab-li active">新闻2</li>
            <li class="tab-li">热点2</li>
            <li class="tab-li">军事2</li>
            <li class="tab-li">社会2</li>
        </ul>
        <ul class="content-warp">
            <li class="content current"><img src="img/1.jpg"></li>
            <li class="content"><img src="img/2.jpg"></li>
            <li class="content"><img src="img/3.jpg"></li>
            <li class="content"><img src="img/4.jpg"></li>
        </ul>
    </div>
<script>
    $(".tab").tab();
</script>
</body>
</html>

插件tab.js!function(    var Tab = function(ele){

this.ele = ele;
        config = JSON.parse(ele.attr('data-config'));
        //默认配置
        this.config = {
            "event":"mouseover",//触发事件
            "time":2000,//切换时间 false 为不切换
            "invoke":1,//默认tab
            "type":"default"//切换方式 默认和淡出
        };
        $.extend(this.config, config);

        //默认地址
        this.index = this.config.invoke;
        //点击事件
        this.switch();

        //默认显示
        this.invoke();

        //轮播
        this.loopfun();
    };

    Tab.prototype  = {
        "switch":function(){
            ele = this.ele;
            var that = this;
            config = this.config;
            event = config.event == "click"?"click":"mouseover";
            if(config.type == "default"){
                ele.find(".tab-li").on(event, function(e, par1){
                    //par1存在则为模拟请求
                    $(this).addClass("active").siblings().removeClass("active");//tab
                    var index = $(this).index();
                    that.ele.find(".content").eq(index).show().addClass("current").siblings().removeClass("current").hide();
                    if(that.loop && !par1){
                        clearInterval(that.loop);  
                        that.loop = null;
                    }
                    that.addIndex(index);
                }).on('mouseout', function(){
                    if(!that.loop){
                        that.loopfun();
                    }
                });
            }else{
                ele.find(".tab-li").on(event, function(e, par1){
                    //par1存在则为模拟请求
                    $(this).addClass("active").siblings().removeClass("active");//tab
                    var index = $(this).index();
                    that.ele.find(".content").eq(index).fadeIn().siblings().fadeOut();
                    if(that.loop && !par1){
                        clearInterval(that.loop);  
                    }
                    that.addIndex(index);
                }).on('mouseout', function(){
                    that.loopfun();
                });
            }
        },
        "invoke":function(){
            ele = this.ele;
            config = this.config;
            ele.find('.tab-li').eq(config.invoke-1).addClass("active").siblings().removeClass("active");
            ele.find('.content').eq(config.invoke-1).addClass("current").siblings().removeClass("current");
        },
"addIndex":function(index){ var count = this.ele.find('.tab-li').length; if(++index>=count){ this.index = 0; }else{ this.index = index; } }, "loopfun":function(){ if(this.config.time && parseInt(this.config.time)){ that = this; this.loop = setInterval(function(){ event = that.config.event == "click"?"click":"mouseover"; that.ele.find(".tab-li").eq(that.index).trigger(event, ['tri']); }, that.config.time) } } } //注册成jquery方法 $.fn.extend({ tab:function(){ this.each(function(){ new Tab($(this)) }) return this; } }) window.Tab = Tab; }(jQuery)

标签可随意设置成文本或其他内容,可自行修改。

依自己的理解对切换逻辑进行修改:

1.mousove触发切换时只有mouseout才会继续轮训切换

2.click触发切换时当鼠标在切换页也只有mouseout才会继续轮训切换

代码托管地址:https://github.com/yimijianfang/tab

原文地址:https://www.cnblogs.com/kkform/p/8214095.html