欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實現(xiàn)tab欄切換的幾種常用方法

 更新時間:2023年12月15日 15:51:10   作者:清風(fēng)徐來。。。  
這篇文章主要給大家介紹了關(guān)于JavaScript實現(xiàn)tab欄切換的幾種常用方法,在Web開發(fā)中Tab切換是一個常見的功能,它允許用戶在不同的頁面部分之間進行切換,需要的朋友可以參考下

整篇文章的基本html結(jié)構(gòu)和css樣式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .tab{
            width: 500px;
            height: 300px;
            border: 1px solid #cfc7c7;
        }
        .tab-nav{
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin: 20px;
        }
        .tab-nav .active{
            color: red;
            border-bottom: 1px solid red;
        }
        .tab-nav ul{
            width: 300px;
            height: 50px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            list-style: none;
            margin-right: 40px;
        }
        .tab-nav ul li{
            margin-right: 10px;
        }
        .tab-content{
            width: 340px;
            height:190px;
            background-color: aquamarine;
            margin-top: -20px;
            margin-left: 120px;
            position: relative;
        }
        .item {
            width: 100%;
            height: 100%;
            position: absolute;
        }
        .item img{
            width: 100%;
            height: 100%;
            display: none;
        }
        .active img{
            display: block;
        }
    </style>
</head>
<body>
    <div class="tab">
        <div class="tab-nav">
            <h3>每日特價</h3>
            <ul>
                <!-- data-id對li元素添加自定義id屬性 -->
                <li class="active" data-id="0">精選</li>
                <li data-id="1">美食</li>
                <li data-id="2">百貨</li>
                <li data-id="3">預(yù)告</li>
            </ul>
        </div>
        <div class="tab-content">
            <div class="item active"><img src="素材圖/js輪播圖/pic01.jpg" alt=""></div>
            <div class="item"><img src="素材圖/js輪播圖/pic02.jpg" alt=""></div>
            <div class="item"><img src="素材圖/js輪播圖/pic03.jpg" alt=""></div>
            <div class="item"><img src="素材圖/js輪播圖/pic04.jpg" alt=""></div>
        </div>
    </div>
</body>

第一種方法:利用js控制 css的樣式進行對tab的內(nèi)容進行切換

    //利用css樣式進行變換
    //#region 
    const Nav = document.querySelectorAll('.tab-nav li')
    for (let i = 0; i < Nav.length; i++) {
        Nav[i].addEventListener('click',function(){
            //尋找class='.active'的結(jié)構(gòu),并將結(jié)構(gòu)中的該類名取消
            document.querySelector('.tab-nav .active').classList.remove('active')
            //在對點擊對象的li中添加active類名,實現(xiàn)字體變色等css樣式
            this.classList.add('active')
            //同樣移除tab-content結(jié)構(gòu)中的active類名
            document.querySelector('.tab-content .active').classList.remove('active')
            //再對tab-content結(jié)構(gòu)中item的第幾個div添加active類名,實現(xiàn)圖片的出現(xiàn)和消失
            //注意nth-child()中的值必須從1開始(不要了解可以去看css的偽類選擇器),i是從0開始,故要+1
            document.querySelector(`.tab-content .item:nth-child(${i+1})`).classList.add('active')
        })
    }
    //#endregion

第二種方法:利用事件委托(即事件冒泡)進行對tab欄的切換

    //利用冒泡
    //#region 
    //利用ul統(tǒng)一管理li,應(yīng)為點擊時li元素,但li身上不存在點擊事件,于是便會冒泡到父級元素身上的點擊事件
    //此方法減少了遍歷的消耗,提高代碼的效率與質(zhì)量
    const ul = document.querySelector('.tab-nav ul')
    ul.addEventListener('click',(e)=>{
        //e.target.tagName獲取鼠標(biāo)點擊對象的標(biāo)簽,為了區(qū)分特意加上了一個p標(biāo)簽,p不參與切換
        if (e.target.tagName === 'LI') {
            document.querySelector('.tab-nav .active').classList.remove('active')
            //e.target獲取鼠標(biāo)點擊對象
            e.target.classList.add('active')
            //此時難點就在于,如何將ul中的li元素和item結(jié)構(gòu)聯(lián)系起來,因為此時獲取的是ul結(jié)構(gòu)。
            //本文里利用的是自定義屬性,對li元素設(shè)置id屬性
            //利用變量i獲取點擊li元素身上的id屬性
            const i =Number(e.target.dataset.id) 
            //注意此處i是字符串型,必須進行轉(zhuǎn)換下面代碼的i+1才能使用
            document.querySelector('.tab-content .active').classList.remove('active')
            document.querySelector(`.tab-content .item:nth-child(${i+1})`).classList.add('active')
        }
    })
    //#endregion

第三種方法:利用數(shù)組的方法,對tab欄進行切換

    //利用數(shù)組將li元素和item中的img元素進行一定的關(guān)系綁定,使其同步出現(xiàn)消失。
    const Nav = document.querySelectorAll('.tab-nav li')
    const Content = document.querySelectorAll('.tab-content .item')
    //此處利用es6的擴展運算符,將Nav中的所有l(wèi)i元素張展開放在arr這個數(shù)組中,brr同理
    let arr = [...Nav]
    let brr = [...Content]
    for (let i = 0; i <arr.length; i++) {
           arr[i].addEventListener('click',function(){
           document.querySelector('.tab-nav .active').classList.remove('active')
           this.classList.add('active')
           document.querySelector('.tab-content .active').classList.remove('active')
           //如此通過變量i實現(xiàn)對li元素一一對應(yīng)上item結(jié)構(gòu)中的img
           brr[i].classList.add('active')
        })
    }

總結(jié) 

到此這篇關(guān)于JavaScript實現(xiàn)tab欄切換的幾種常用方法的文章就介紹到這了,更多相關(guān)JS實現(xiàn)tab欄切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • echarts浮動顯示單位的實現(xiàn)方法示例

    echarts浮動顯示單位的實現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于echarts浮動顯示單位的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 通俗易懂講解Json Web Token (JWT)

    通俗易懂講解Json Web Token (JWT)

    這篇文章主要介紹了通俗易懂講解Json Web Token (JWT)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 微信小程序的部署方法步驟

    微信小程序的部署方法步驟

    這篇文章主要介紹了微信小程序的部署方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • js ie非ie瀏覽器的幾種判斷方法小結(jié)

    js ie非ie瀏覽器的幾種判斷方法小結(jié)

    其實有很多判斷的方法,大都是根據(jù)瀏覽器的特性來的,這里簡單的整理下,需要的朋友可以參考下。
    2010-05-05
  • js刪除數(shù)組元素、清空數(shù)組的簡單方法(必看)

    js刪除數(shù)組元素、清空數(shù)組的簡單方法(必看)

    下面小編就為大家?guī)硪黄猨s刪除數(shù)組元素、清空數(shù)組的簡單方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript編寫棋盤覆蓋代碼詳解

    JavaScript編寫棋盤覆蓋代碼詳解

    這篇文章主要介紹了JavaScript編寫棋盤覆蓋代碼詳解,需要的朋友可以參考下
    2017-08-08
  • js 定時器setTimeout無法調(diào)用局部變量的解決辦法

    js 定時器setTimeout無法調(diào)用局部變量的解決辦法

    javascript中定時器setTimeout無法調(diào)用局部變量,只需要將setTimeout的第一個參數(shù)改成函數(shù)對象,而不是字符串,就可以了
    2013-11-11
  • 利用babel將es6語法轉(zhuǎn)es5的簡單示例

    利用babel將es6語法轉(zhuǎn)es5的簡單示例

    Babel是一個廣泛使用的轉(zhuǎn)碼器,babel可以將ES6代碼完美地轉(zhuǎn)換為ES5代碼,所以下面這篇文章就來給大家詳細介紹了關(guān)于利用babel將es6語法轉(zhuǎn)es5的相關(guān)資料,文章通過示例介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • Bootstrap基本插件學(xué)習(xí)筆記之Tooltip提示工具(18)

    Bootstrap基本插件學(xué)習(xí)筆記之Tooltip提示工具(18)

    這篇文章主要為大家詳細介紹了Bootstrap基本插件學(xué)習(xí)筆記之oltip提示工具的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 小程序獲取用戶名和頭像完整代碼

    小程序獲取用戶名和頭像完整代碼

    這篇文章主要介紹了關(guān)于小程序獲取用戶名和頭像的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者用小程序具有一需要的參考借鑒價值,朋友可以參考下
    2023-07-07

最新評論