JavaScript基础 - 经典案例3 - tab栏选项卡切换

本文介绍了使用JavaScript高效实现Tab栏切换的方法,通过排他思想优化,精准移除当前active类,再为选中项添加active类,以实现更加高效的切换效果。并提供了一个柯南Tab栏案例的代码示例,包括HTML、JS和CSS部分。

通常我们用 js 写 tab 栏切换功能会用到 排他思想,即干掉其他人,留下我自己

但也可以用一个更有效率的方法:找出那个特殊的人,精准干掉他,放过其他无辜的人,然后留下我自己

实现过程:假设需要切换的样式类为 active类,要干掉那个唯一的active类

document.querySelector('.active').classList.remove('active')

之后再去给自己设置 active类 就可以啦!

// this指需要切换的tab元素
this.classList.add('active')

柯南tab栏案例练习:

代码示例:

HTML:

<div class="card">
    <ul class="tab">
        <li class="tab-items active">柯南</li>
        <li class="tab-items">小兰</li>
        <li class="tab-items">小哀</li>
        <li class="tab-items">基德</li>
    </ul>
    <div class="info">
        <div class="main active">
            <p>
                外表看似小孩,其真实身份是高中生侦探——工藤新一。
            </p>
        </div>
        <div class="main">
            <p>
                新一的青梅竹马,一直喜欢着新一,在他突然消失后等待着他的归来。
            </p>
        </div>
        <div class="main">
            <p>
                外表是小孩,但其实是黑衣组织的一员,新一被灌下的毒药(APTX4869)的开发者,代号雪莉。
            </p>
        </div>
        <div class="main">
            <p>
                变装达人。轰动世界的神出鬼没的怪盗。总是会送上预告函,将警察玩弄于股掌之间,被世人称作“怪盗基德”。
            </p>
        </div>
    </div>
</div>

JS:

// 获取元素
let tabs = document.querySelectorAll('.tab .tab-items')
let mains = document.querySelectorAll('.info .main')

// 监听tab栏点击事件
for (let i = 0; i < tabs.length; i++) {
    tabs[i].addEventListener('click', function(){
        // 切换tab栏样式
        // 将原本有active类的那个tab的active类移除掉
        document.querySelector('.tab-items.active').classList.remove('active')

        // 给触发点击事件的tab增加active类
        this.classList.add('active')

        // 切换下方内容区
        // 隐藏原本显示的那个内容区
        document.querySelector('.main.active').classList.remove('active')

        // 显示当前tab对应的内容区
        mains[i].classList.add('active')
    })
}

CSS:

* {
    margin: 0;
    padding: 0;
}

li {
    list-style: none;
}

.card {
    width: 400px;
    margin: 100px auto;
}

.tab {
    display: flex;
    justify-content: space-between;
    align-items: stretch;
    width: 400px;
    height: 50px;
}

.tab .tab-items {
    width: 94px;
    line-height: 50px;
    background-color: rgb(207, 139, 138);
    font-size: 18px;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

.tab .tab-items.active {
    background-color: rgb(171, 197, 222);
}

.info {
    height: 250px;
}

.info .main {
    display: none;
    width: 400px;
    height: 250px;
    padding: 15px;
    box-sizing: border-box;
    background-color: rgb(171, 197, 222);
    font-size: 21px;
}

.info .main.active {
    display: block;
}

结束;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值