溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript如何實(shí)現(xiàn)Tab欄切換特效

發(fā)布時(shí)間:2022-04-25 15:51:18 來源:億速云 閱讀:109 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“JavaScript如何實(shí)現(xiàn)Tab欄切換特效”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

運(yùn)行效果展示:

JavaScript如何實(shí)現(xiàn)Tab欄切換特效

JavaScript如何實(shí)現(xiàn)Tab欄切換特效

如上圖所示,其實(shí)就是點(diǎn)擊上方的Tab欄然后Tab欄本身的樣式會(huì)被修改,然后其下方的內(nèi)容塊也會(huì)跟著顯示對應(yīng)的內(nèi)容。這樣的效果以及功能在前端的應(yīng)用是非常廣泛的,所以這可以說是前端必會(huì)了。話不多說下面先上代碼:

(這里就不上CSS樣式代碼了,個(gè)人根據(jù)需求進(jìn)行設(shè)置即可,li用float布局就好)

HTML的結(jié)構(gòu):

<div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介紹</li><!-- 默認(rèn)選中第一個(gè)li,current是決定紅底白字的樣式的 -->
                <li>規(guī)格與包裝</li>
                <li>售后保障</li>
                <li>商品評價(jià)(50000)</li>
                <li>手機(jī)社區(qū)</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;"><!-- 這個(gè)item是默認(rèn)顯示的,因?yàn)樗械膇tem的display值都為none -->
                商品介紹模塊內(nèi)容
            </div>
            <div class="item">
                規(guī)格與包裝模塊內(nèi)容
            </div>
            <div class="item">
                售后保障模塊內(nèi)容
            </div>
            <div class="item">
                商品評價(jià)(50000)模塊內(nèi)容
            </div>
            <div class="item">
                手機(jī)社區(qū)模塊內(nèi)容
            </div>
 
        </div>
</div>

下面是JS代碼:

<script>
        // 業(yè)務(wù)需求:點(diǎn)擊tab欄被點(diǎn)擊的tab欄擁有不一樣的樣式,其下方的div也要跟著點(diǎn)擊進(jìn)行切換實(shí)現(xiàn)內(nèi)容也跟著變動(dòng)的效果
        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);    // 給每個(gè)li添加一個(gè)data-index的自定義屬性,值是它們自己在lis中的下標(biāo),這個(gè)值主要讓我們判斷我們當(dāng)前點(diǎn)擊的是哪個(gè)li從而幫助我們后續(xù)修改它對應(yīng)的div的display值
            lis[i].onclick = function () {
                // 1.第一步,用排他思想先做出用戶點(diǎn)擊誰就給誰class屬性賦值,注意其他沒有被點(diǎn)擊的都需要操作它們的class值為空,這就是干掉其他人留下我自己的排他思想
                for (var i = 0; i <lis.length; i++) {
                    lis[i].className = "";  // 用循環(huán)先將所有人(包括自己)的class類名為空
                }
                // 再單獨(dú)給自己修改class類名即留下我自己
                this.className = "current";  // current這個(gè)類名的CSS樣式是已經(jīng)寫好了的
                
                // 然后上面的tab欄樣式好了就要處理第二步就是點(diǎn)擊誰就讓其對應(yīng)的下屬div顯示出來,其他沒有被點(diǎn)擊的就隱藏,這里主要是需要先知道用戶點(diǎn)擊的是誰,然后再給對象的div設(shè)置display為block即可。還是需用用排他思想來做哦
                // 第二步:根據(jù)點(diǎn)擊修改div的display屬性值
                var index = this.getAttribute("index"); // 獲取當(dāng)前被點(diǎn)擊的li的index
                for (var i = 0; i < lis.length; i++) { // 用循環(huán)讓每個(gè)item的display都為none即干掉所有人
                    tabs[i].style.display = "none";
                }
                // 在tabs中鎖定li的index對應(yīng)的item單獨(dú)將它的display值改成block即留下我自己
                tabs[index].style.display = "block";
            }
        }
</script>

這里再說下實(shí)現(xiàn)步驟和思路(JS代碼里已有詳細(xì)分析):首先功能大致分兩步:第一,對li標(biāo)簽的樣式修改,即用戶點(diǎn)擊哪個(gè)li該li的樣式隨著改變?yōu)榧t底白字,而它之外的其他li則是灰底黑字的默認(rèn)樣式;第二,上面的樣式修改了下面的文字模塊的內(nèi)容也要隨之改變,下面其實(shí)是放了與li一一對應(yīng)的div來裝文字內(nèi)容,只是它們的顯示是由Tab欄的li決定的,所以要實(shí)現(xiàn)div的文字隨著li變動(dòng)我們就需要知道當(dāng)前用戶點(diǎn)擊的是哪個(gè)li,這里用到的方法是 lis[i].setAttribute("index", i),即用循環(huán)給每一個(gè)li標(biāo)簽添加一個(gè)自定義屬性index值等于lis(所有的li組成的數(shù)組)的索引,則根據(jù)index的值我們就能知道用戶點(diǎn)擊的是哪個(gè)li了,這樣我們再?zèng)Q定是哪個(gè)div顯示出來就可以了。(建議看代碼結(jié)合注釋更好理解一些)

注意:這里再說一下“排他思想”,即像這樣的列表或是表格之類的元素對象,一般可以統(tǒng)一獲取再存入一個(gè)數(shù)組中的元素對象,我們要控制當(dāng)前選中的該元素和其他沒有被選中的元素“有所不同”時(shí),就常常設(shè)計(jì)“排他思想”,主要分兩步實(shí)現(xiàn):1.用循環(huán)遍歷將這些所有的元素(包括選中的那個(gè)元素)都“干掉”,這一步主要是讓所有的元素“都一樣”誰也沒有不同之處,然后再給我們選中的那個(gè)元素添加上我們想要給它的樣式或功能(即留下我自己)。這樣兩步加起來,就實(shí)現(xiàn)了選中誰,誰“不一樣”的效果。

“JavaScript如何實(shí)現(xiàn)Tab欄切換特效”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI