自定义tab(模拟tab效果)

实现效果

自定义tab(模拟tab效果)

html模板

 <div>
        <div class="tab-header">
            <ul>
                <li data-id="item1" title="单击刷新1" class="tab-active">页签1<span class="badge">21</span></li>
                <li data-id="item2" title="单击刷新2">页签2</li>
                <li data-id="item3" title="单击刷新3">页签3</li>
                <li data-id="item4" title="单击刷新4">页签4</li>
                <span class="ul-span not-allowed">页签5</span>
                <span class="ul-span not-allowed">页签6</span>
            </ul>
        </div>
        <div class="tab-content" style="width: 800px;">
            <div id="item1" class="tab-item tab-item-active">
                <div class="tab-header">
                    <ul>
                        <li class="tab-active">全部<span class="badge">21</span></li>
                        <li>收文<span class="badge">10</span></li>
                        <li>发文<span class="badge">8</span></li>
                        <li>出差<span class="badge">11</span></li>
                        <li>请假<span class="badge">1</span></li>
                        <li>其他<span class="badge">0</span></li>
                    </ul>
                </div>
                <div>
                    <table id="normalTaskTable" class="task-table">
                        <thead>
                        <tr>
                            <td style="">任务名称</td>
                            <td style="">任务状态</td>
                            <td style="">下次汇报时间</td>
                            <td style="">是否逾期</td>
                            <td style="">逾期天数</td>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td>测试任务</td>
                            <td>进行中</td>
                            <td>2019-04-25</td>
                            <td>否</td>
                            <td>0</td>
                        </tr>
                        <tr>
                            <td>测试任务2</td>
                            <td>进行中</td>
                            <td>2019-04-25</td>
                            <td>否</td>
                            <td>0</td>
                        </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <div id="item2" class="tab-item">
                <div>
                    内容二
                </div>
            </div>
            <div id="item3" class="tab-item">
                <div>
                    内容三
                </div>
            </div>
            <div id="item4" class="tab-item">
                <div>
                    内容四
                </div>
            </div>
        </div>
    </div>

 

主要的js

var lis = document.querySelectorAll(".tab-header li"); //查询到所有的样式为tab-header下的li(即tab页签)
    for (var i=0; i<lis.length; i++ ){  //遍历进行绑定事件
        var ele = lis[i];
        ele.addEventListener('click',function(e){
            var element = e.target;
            var children = e.target.parentNode.children; //查找到当前点击的同级元素
            for(var j=0; j<children.length; j++){  //同级元素去掉点击后的效果颜色
                var child  = children[j];
                child.classList.remove("tab-active");
            }
            e.target.classList.add("tab-active"); //当前点击元素添加点击后的效果
            var data_id = element.getAttribute("data-id"); //获取当前点击元素的data-id属性(即其绑定的要显示的内容)
            var contentNode = document.getElementById(data_id); //获取要显示的内容元素
            if(contentNode != null){  // 如果元素不为空
                var contentList = contentNode.parentNode.children; //查找要显示元素的同级元素
                for(var k=0; k<contentList.length; k++){  //隐藏同级元素
                    contentList[k].classList.remove("tab-item-active");
                }
                contentNode.classList.add("tab-item-active");//显示元素
            }
        },false)
    }

主要的css

    .tab-header{

    }
    .tab-header ul,.tab-header-bold ul{
        list-style: none;
        margin: 0;
        padding: 10px 0;
        font-size: 0;
        white-space: nowrap;
        position: relative;
    }
    .tab-header-bold ul{
        color: #ffb07b;
    }
    .tab-header ul li,.tab-header ul .ul-span,
    .tab-header-bold ul li,.tab-header-bold ul .ul-span
    {
        display: inline-block;
        padding: 0px 10px;
        border-right: 1px solid #000000;
        cursor: pointer;
    }
    .tab-header ul li:last-child,.tab-header ul span:last-child,
    .tab-header-bold ul li:last-child,.tab-header-bold ul span:last-child
    {
        border-right: 0px solid #000000;
    }
    .tab-header ul li,.tab-header ul .ul-span{
        font-size: 14px;
    }
    .tab-header-bold ul li,.tab-header-bold ul .ul-span{
        font-size: 16px;
    }
    .tab-content{

    }
    .tab-item{
        min-height: 200px;
        min-width: 300px;
        background-color: #00a080;
        display: none;
        padding: 5px 10px;
    }
    .tab-active{
        color: #0C8CEB;
    }
    .tab-active-color{
        color: #000000;
    }
    .tab-item-active{
        display: block;
    }
    .not-allowed{
        cursor: not-allowed !important;
        color: #adacac;
    }
    .badge{
        position: relative;
        top: -5px;
        right: 0px;
        padding: 0px 5px;
        border-radius: 50%;
        background: #FF8000;
        font-size: 12px;
        color: #fff;
        font-weight: normal;
    }
    .task-table{
        width: 100%;
        border-top: 1px solid #000000;
        border-left: 1px solid #000000;
        border-collapse: collapse; /*设置单元格的边框合并为1*/
    }
    .task-table td{
        border-bottom: 1px solid #000000;
        border-right: 1px solid #000000;
    }
    .task-table thead tr td {
        line-height: 30px;
        text-align: center;
        background-color: #e1e1e1;
        font-weight: bold;

    }
    .task-table tbody tr td{
        padding: 8px;
    }
    .task-table tbody tr:nth-child(odd){
        background-color: #ffffff;
    }
    .task-table tbody tr:nth-child(even){
        background-color: #F9F9F9;
    }
    .task-table tbody tr:hover{
        background-color: #F5F5F5;
    }

全部代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自制模拟tab选项卡效果</title>
</head>
<style type="text/css">
    .tab-header{

    }
    .tab-header ul,.tab-header-bold ul{
        list-style: none;
        margin: 0;
        padding: 10px 0;
        font-size: 0;
        white-space: nowrap;
        position: relative;
    }
    .tab-header-bold ul{
        color: #ffb07b;
    }
    .tab-header ul li,.tab-header ul .ul-span,
    .tab-header-bold ul li,.tab-header-bold ul .ul-span
    {
        display: inline-block;
        padding: 0px 10px;
        border-right: 1px solid #000000;
        cursor: pointer;
    }
    .tab-header ul li:last-child,.tab-header ul span:last-child,
    .tab-header-bold ul li:last-child,.tab-header-bold ul span:last-child
    {
        border-right: 0px solid #000000;
    }
    .tab-header ul li,.tab-header ul .ul-span{
        font-size: 14px;
    }
    .tab-header-bold ul li,.tab-header-bold ul .ul-span{
        font-size: 16px;
    }
    .tab-content{

    }
    .tab-item{
        min-height: 200px;
        min-width: 300px;
        background-color: #00a080;
        display: none;
        padding: 5px 10px;
    }
    .tab-active{
        color: #0C8CEB;
    }
    .tab-active-color{
        color: #000000;
    }
    .tab-item-active{
        display: block;
    }
    .not-allowed{
        cursor: not-allowed !important;
        color: #adacac;
    }
    .badge{
        position: relative;
        top: -5px;
        right: 0px;
        padding: 0px 5px;
        border-radius: 50%;
        background: #FF8000;
        font-size: 12px;
        color: #fff;
        font-weight: normal;
    }
    .task-table{
        width: 100%;
        border-top: 1px solid #000000;
        border-left: 1px solid #000000;
        border-collapse: collapse; /*设置单元格的边框合并为1*/
    }
    .task-table td{
        border-bottom: 1px solid #000000;
        border-right: 1px solid #000000;
    }
    .task-table thead tr td {
        line-height: 30px;
        text-align: center;
        background-color: #e1e1e1;
        font-weight: bold;

    }
    .task-table tbody tr td{
        padding: 8px;
    }
    .task-table tbody tr:nth-child(odd){
        background-color: #ffffff;
    }
    .task-table tbody tr:nth-child(even){
        background-color: #F9F9F9;
    }
    .task-table tbody tr:hover{
        background-color: #F5F5F5;
    }
</style>
<body>
    <div>
        <div class="tab-header">
            <ul>
                <li data-id="item5" class="tab-active">页签1</li>
                <li data-id="item6">页签2</li>
                <li data-id="item7">页签3</li>
                <li data-id="item8">页签4</li>
            </ul>
        </div>
        <div class="tab-content" style="width: 800px;">
            <div id="item5" class="tab-item tab-item-active">
                <div>
                    内容一
                </div>
            </div>
            <div id="item6" class="tab-item">
                <div>
                    内容二
                </div>
            </div>
            <div id="item7" class="tab-item">
                <div>
                    内容三
                </div>
            </div>
            <div id="item8" class="tab-item">
                <div>
                    内容四
                </div>
            </div>
        </div>
    </div>
    <div>
        <div class="tab-header-bold">
            <ul>
                <li data-id="item1" title="单击刷新1" class="tab-active-color">页签1<span class="badge">21</span></li>
                <li data-id="item2" title="单击刷新2">页签2</li>
                <li data-id="item3" title="单击刷新3">页签3</li>
                <li data-id="item4" title="单击刷新4">页签4</li>
                <span class="ul-span not-allowed">页签5</span>
                <span class="ul-span not-allowed">页签6</span>
            </ul>
        </div>
        <div class="tab-content" style="width: 800px;">
            <div id="item1" class="tab-item tab-item-active">
                <div class="tab-header">
                    <ul>
                        <li class="tab-active">全部<span class="badge">21</span></li>
                        <li>收文<span class="badge">10</span></li>
                        <li>发文<span class="badge">8</span></li>
                        <li>出差<span class="badge">11</span></li>
                        <li>请假<span class="badge">1</span></li>
                        <li>其他<span class="badge">0</span></li>
                    </ul>
                </div>
                <div>
                    <table id="normalTaskTable" class="task-table">
                        <thead>
                        <tr>
                            <td style="">任务名称</td>
                            <td style="">任务状态</td>
                            <td style="">下次汇报时间</td>
                            <td style="">是否逾期</td>
                            <td style="">逾期天数</td>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td>测试任务</td>
                            <td>进行中</td>
                            <td>2019-04-25</td>
                            <td>否</td>
                            <td>0</td>
                        </tr>
                        <tr>
                            <td>测试任务2</td>
                            <td>进行中</td>
                            <td>2019-04-25</td>
                            <td>否</td>
                            <td>0</td>
                        </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <div id="item2" class="tab-item">
                <div>
                    内容二
                </div>
            </div>
            <div id="item3" class="tab-item">
                <div>
                    内容三
                </div>
            </div>
            <div id="item4" class="tab-item">
                <div>
                    内容四
                </div>
            </div>
        </div>
    </div>
</body>
<script type="text/javascript">
    var lis = document.querySelectorAll(".tab-header li"); //查询到所有的样式为tab-header下的li(即tab页签)
    for (var i=0; i<lis.length; i++ ){  //遍历进行绑定事件
        var ele = lis[i];
        ele.addEventListener('click',function(e){
            var element = e.target;
            var children = e.target.parentNode.children; //查找到当前点击的同级元素
            for(var j=0; j<children.length; j++){  //同级元素去掉点击后的效果颜色
                var child  = children[j];
                child.classList.remove("tab-active");
            }
            e.target.classList.add("tab-active"); //当前点击元素添加点击后的效果
            var data_id = element.getAttribute("data-id"); //获取当前点击元素的data-id属性(即其绑定的要显示的内容)
            var contentNode = document.getElementById(data_id); //获取要显示的内容元素
            if(contentNode != null){  // 如果元素不为空
                var contentList = contentNode.parentNode.children; //查找要显示元素的同级元素
                for(var k=0; k<contentList.length; k++){  //隐藏同级元素
                    contentList[k].classList.remove("tab-item-active");
                }
                contentNode.classList.add("tab-item-active");//显示元素
            }
        },false)
    }
    var boldLis = document.querySelectorAll(".tab-header-bold li");
    for (var i=0; i<boldLis.length; i++ ){
        var ele = boldLis[i];
        ele.addEventListener('click',function(e){
            var element = e.target;
            var children = e.target.parentNode.children;
            for(var j=0; j<children.length; j++){
                var child  = children[j];
                child.classList.remove("tab-active-color");
            }
            e.target.classList.add("tab-active-color");
            var data_id = element.getAttribute("data-id");
            var contentNode = document.getElementById(data_id);
            if(contentNode != null){
                var contentList = contentNode.parentNode.children;
                for(var k=0; k<contentList.length; k++){
                    contentList[k].classList.remove("tab-item-active");
                }
                contentNode.classList.add("tab-item-active");
            }
        },false)
    }

    //重置指定id容器下角标
	function resetBadge(groupId){
		var badges = document.getElementById(groupId).getElementsByClassName("badge");
		for(var i=0; i<badges.length; i++){
			var ele = badges[i];
			ele.innerHTML = 0;
			ele.style.display = "none";
		}
	}
</script>
</html>