JavaScript-Tab栏切换效果(思路详解)

这里分享一个前端必会的案例,是一个Tab栏的切换效果,除了Tab栏本身会被点击切换之外,Tab本身也决定着其下方的内容板块的显示。

运行效果展示:

如上图所示,其实就是点击上方的Tab栏然后Tab栏本身的样式会被修改,然后其下方的内容块也会跟着显示对应的内容。这样的效果以及功能在前端的应用是非常广泛的,所以这可以说是前端必会了。话不多说下面先上代码:

(这里就不上CSS样式代码了,个人根据需求进行设置即可,li用float布局就好)

HTML的结构:

<div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li><!-- 默认选中第一个li,current是决定红底白字的样式的 -->
                <li>规格与包装</li>
                <li>售后保障</li>
                <li>商品评价(50000)</li>
                <li>手机社区</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;"><!-- 这个item是默认显示的,因为所有的item的display值都为none -->
                商品介绍模块内容
            </div>
            <div class="item">
                规格与包装模块内容
            </div>
            <div class="item">
                售后保障模块内容
            </div>
            <div class="item">
                商品评价(50000)模块内容
            </div>
            <div class="item">
                手机社区模块内容
            </div>

        </div>
    </div>

下面是JS代码:

<script>
        // 业务需求:点击tab栏被点击的tab栏拥有不一样的样式,其下方的div也要跟着点击进行切换实现内容也跟着变动的效果
        var tab_list = document.querySelector('.tab_list');
        var lis = tab_list.querySelectorAll('li');
        var tabs = document.querySelectorAll('.item');
        for (var i = 0; i < lis.length; i++) {
            lis[i].setAttribute('data-index', i);    // 给每个li添加一个data-index的自定义属性,值是它们自己在lis中的下标,这个值主要让我们判断我们当前点击的是哪个li从而帮助我们后续修改它对应的div的display值
            lis[i].onclick = function () {
                // 1.第一步,用排他思想先做出用户点击谁就给谁class属性赋值,注意其他没有被点击的都需要操作它们的class值为空,这就是干掉其他人留下我自己的排他思想
                for (var i = 0; i <lis.length; i++) {
                    lis[i].className = '';  // 用循环先将所有人(包括自己)的class类名为空
                }
                // 再单独给自己修改class类名即留下我自己
                this.className = 'current';  // current这个类名的CSS样式是已经写好了的
                
                // 然后上面的tab栏样式好了就要处理第二步就是点击谁就让其对应的下属div显示出来,其他没有被点击的就隐藏,这里主要是需要先知道用户点击的是谁,然后再给对象的div设置display为block即可。还是需用用排他思想来做哦
                // 第二步:根据点击修改div的display属性值
                var index = this.getAttribute('index'); // 获取当前被点击的li的index
                for (var i = 0; i < lis.length; i++) { // 用循环让每个item的display都为none即干掉所有人
                    tabs[i].style.display = 'none';
                }
                // 在tabs中锁定li的index对应的item单独将它的display值改成block即留下我自己
                tabs[index].style.display = 'block';
            }
        }
</script>

这里再说下实现步骤和思路(JS代码里已有详细分析):首先功能大致分两步:第一,对li标签的样式修改,即用户点击哪个li该li的样式随着改变为红底白字,而它之外的其他li则是灰底黑字的默认样式;第二,上面的样式修改了下面的文字模块的内容也要随之改变,下面其实是放了与li一一对应的div来装文字内容,只是它们的显示是由Tab栏的li决定的,所以要实现div的文字随着li变动我们就需要知道当前用户点击的是哪个li,这里用到的方法是 lis[i].setAttribute('index', i),即用循环给每一个li标签添加一个自定义属性index值等于lis(所有的li组成的数组)的索引,则根据index的值我们就能知道用户点击的是哪个li了,这样我们再决定是哪个div显示出来就可以了。(建议看代码结合注释更好理解一些)

注意:这里再说一下“排他思想”,即像这样的列表或是表格之类的元素对象,一般可以统一获取再存入一个数组中的元素对象,我们要控制当前选中的该元素和其他没有被选中的元素“有所不同”时,就常常涉及“排他思想”,主要分两步实现:1.用循环遍历将这些所有的元素(包括选中的那个元素)都“干掉”,这一步主要是让所有的元素“都一样”谁也没有不同之处,2.然后再给我们选中的那个元素添加上我们想要给它的样式或功能(即留下我自己)。这样两步加起来,就实现了选中谁,谁“不一样”的效果。

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: JavaScript实现tab自动切换的方法: 1.使用setInterval()函数,设置定时器,定时执行tab切换的代码。 2.在tab切换的代码中,使用DOM操作获取tab的当前选中项,然后判断是否为最后一项,如果是,则将选中项设置为第一项,否则将选中项设置为下一项。 3.在tab切换的代码中,使用DOM操作获取tab的选项卡内容,然后根据选中项的索引值,将对应的内容显示出来,将其他内容隐藏起来。 4.在页面加载完成后,调用tab切换的代码,开始自动切换。 示例代码: HTML部分: <div class="tab"> <ul class="tab-nav"> <li class="active">选项卡1</li> <li>选项卡2</li> <li>选项卡3</li> </ul> <div class="tab-content"> <div class="tab-pane active">选项卡1的内容</div> <div class="tab-pane">选项卡2的内容</div> <div class="tab-pane">选项卡3的内容</div> </div> </div> JavaScript部分: var tabNav = document.querySelector('.tab-nav'); var tabContent = document.querySelector('.tab-content'); var tabs = tabNav.querySelectorAll('li'); var panes = tabContent.querySelectorAll('.tab-pane'); var intervalId; function switchTab() { var activeTab = tabNav.querySelector('.active'); var activePane = tabContent.querySelector('.active'); var nextTab = activeTab.nextElementSibling || tabs[0]; var nextPane = panes[nextTab.dataset.index]; activeTab.classList.remove('active'); activePane.classList.remove('active'); nextTab.classList.add('active'); nextPane.classList.add('active'); } intervalId = setInterval(switchTab, 3000); // 停止自动切换 // clearInterval(intervalId); ### 回答2: JavaScript通过操作DOM元素和计时器函数可以实现tab的自动切换效果。一般来说,tab的自动切换是通过定时器函数setInterval来实现的。 首先,我们需要获取tab的所有选项卡和对应的内容区域。然后,使用一个变量来记录当前选中的选项卡的索引(即默认显示的选项卡的索引)。 接下来,我们可以设置一个定时器函数,每隔一定的时间(比如3秒)就切换到下一个选项卡,并将记录当前选中选项卡的索引变量加1。当索引等于选项卡总数时,将索引变量重置为0,即回到第一个选项卡。 同时,需要将选项卡内容的display属性设置为“none”,并将当前选项卡的内容的display属性设置为“block”,来实现选项卡切换效果。 最后,我们需要为选项卡添加鼠标悬停事件和点击事件,用于停止自动切换和手动切换选项卡。 总的来说,tab自动切换的实现思路需要结合DOM操作、定时器函数以及事件处理等知识。对于涉及到的具体实现细节,可以具体根据项目需求来进行调整和优化。 ### 回答3: JavaScript的tab自动切换,通常应用于网站中类似于文章内容、产品展示等需要分展示的页面,以便更好地呈现页面的内容。 实现该功能的方法有很多种,本文将介绍其中的一种实现方式。 1. HTML结构 首先,我们需要在HTML中定义一个tab的结构,主要包括一个ul(无序列表)和一组li(每个选项卡)。 例如: ``` <ul class="tab"> <li class="active">选项卡1</li> <li>选项卡2</li> <li>选项卡3</li> </ul> ``` 其中,active表示当前活跃的选项卡的样式,在CSS中可以定义对应的样式。 2. CSS样式 接下来,我们需要定义我们的选项卡样式。一般情况下,选项卡应该呈现为一排并且光标在选项卡的上方时要有醒目的反馈效果,为了实现该效果,我们可以添加如下的CSS样式: ``` ul.tab { list-style-type: none; margin: 0; padding: 0; overflow: hidden; background-color: #f1f1f1; } ul.tab li { float: left; cursor: pointer; padding: 14px 16px; border-top: 2px solid #ffffff; } ul.tab li.active { background-color: #ccc; border: none; } ``` 在这里,我们定义了选项卡和选项卡列表的样式和选项卡被选中时的样式。 3. JavaScript实现 现在我们已经完成了HTML结构和CSS样式,接下来我们需要使用JavaScript来自动切换选项卡。 首先,我们需要定义一个switchTab函数,在该函数中我们需要隐藏所有的tab内容,并显示当前选中的tab相应的内容。例如: ``` function switchTab(event, tabName) { // 清除现有样式 const tabs = document.getElementsByClassName("tabcontent"); for (let i = 0; i < tabs.length; i++) { tabs[i].style.display = "none"; } // 添加活动类别 const tabLinks = document.getElementsByClassName("tablink"); for (let i = 0; i < tabLinks.length; i++) { tabLinks[i].className = tabLinks[i].className.replace(" active", ""); } // 显示当前内容和样式 document.getElementById(tabName).style.display = "block"; event.currentTarget.className += " active"; } ``` 这个函数包括三个主要的步骤: 1. 清除现有样式:我们首先从DOM中获取所有的tab内容,并将它们全部隐藏。 2. 添加活动类别:我们接下来需要获取所有的选项卡链接,并将它们的className中的“active”样式都清理掉。 3. 显示当前内容和样式:最后,我们要获取到当前选中的选项卡的内容,并将它显示出来,同时将选项卡链接的className属性添加“active”样式,以此来高亮选中的选项卡。 接下来,我们需要使用window.setTimeout()函数来实现tab的自动切换。例如: ``` let index = 0; automaticSwitch(); function automaticSwitch() { const tabs = document.getElementsByClassName("tablink"); for (let i = 0; i < tabs.length; i++) { tabs[i].className = tabs[i].className.replace(" active", ""); } index++; if (index > tabs.length) { index = 1; } tabs[index - 1].className += " active"; setTimeout(automaticSwitch, 3000); } ``` 在这里,我们定义了index变量,并递增,从而实现选项卡的循环切换。同时,我们使用setTimeout()函数来延时切换。 结论: 通过以上步骤,我们就可以实现JavaScript自动切换tab的功能了。当用户点击选项卡时,JavaScript将会切换选项卡,并显示相应内容。当选项卡自动切换时,JavaScript将会自动切换选项卡,以便更好地展现页面内容。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值