美文网首页qwlz
用排他思想实现一个tab栏切换效果

用排他思想实现一个tab栏切换效果

作者: 9979eb0cd854 | 来源:发表于2018-07-23 22:57 被阅读16次

今天学习的JS中,要实现tab栏切换效果,运用了排他思想。


图片.png

用户点击button时,不但button的背景颜色会改变,而且下面的内容也会随之改变。


图片.png
首先要实现button的改变,用for循环遍历每个button,对所有的button进行初始化,使其类名为空;然后跳出循环,对当前被点击的button赋予一个类。
图片.png

而对于下面每个盒子随着button的不同而改变,首先得先得到每个button的序号,对每个进行匹配,使之互相对应。


图片.png

tab栏封装

多个tab栏切换时需要用大盒子的id区分来封装函数,代码如下:

html

<div class="box" id="one">
        <div class="mt">
            <span class="current">新闻</span>
            <span>体育</span>
            <span>娱乐</span>
            <span>八卦</span>
        </div>
        <div class="mb">
            <ul>
                <li class="show">新闻模块</li>
                <li>体育模块</li>
                <li>娱乐模块</li>
                <li>八卦模块</li>
            </ul>
        </div>
    </div>
    
    <div class="box" id="two">
        <div class="mt">
            <span class="current">新闻</span>
            <span>体育</span>
            <span>娱乐</span>
            <span>八卦</span>
        </div>
        <div class="mb">
            <ul>
                <li class="show">新闻模块</li>
                <li>体育模块</li>
                <li>娱乐模块</li>
                <li>八卦模块</li>
            </ul>
        </div>
    </div>
    
    <div class="box" id="three">
        <div class="mt">
            <span class="current">新闻</span>
            <span>体育</span>
            <span>娱乐</span>
            <span>八卦</span>
        </div>
        <div class="mb">
            <ul>
                <li class="show">新闻模块</li>
                <li>体育模块</li>
                <li>娱乐模块</li>
                <li>八卦模块</li>
            </ul>
        </div>
    </div>

css

* {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
        .box {
            width: 350px;
            height: 300px;
            border: 1px solid #ccc;
            margin: 100px auto;
            overflow: hidden;
        }
        .mt span {
            display: inline-block;
            width: 80px;
            height: 30px;
            text-align: center;
            line-height: 30px;
            cursor: pointer;
            background-color: pink;
        }
        .mt .current {
            background-color: purple;
        }
        .mb li {
            width: 100%;
            height: 270px;
            background-color: purple;
            display: none;
        }
        .mb .show {
            display: block;
        }

js

window.onload = function() {
    //想多个盒子互不影响     可以通过用id来区分开
    
    //封装tab栏切换函数——id函数
    function tab(obj) {
        var target =  document.getElementById(obj);
        var spans = target.getElementsByTagName('span');
        var lis = target.getElementsByTagName('li');
        
        for (var i = 0;i < spans.length;i++) {
            //记录索引号
            spans[i].index = i;
            spans[i].onmouseover = function() {
                for (var j = 0;j < spans.length;j++) {
                    spans[j].className = '';
                    lis[j].className = '';
                }
                this.className = 'current';
                lis[this.index].className = 'show';
            }
        }
    }
    //三个盒子都用到,所以要调用三次,把他们的id调用进去
    tab('one');
    tab('two');
    tab('three');
}

效果图

image.png

相关文章

网友评论

    本文标题:用排他思想实现一个tab栏切换效果

    本文链接:https://www.haomeiwen.com/subject/fbysmftx.html