JavaScript 實(shí)現(xiàn) Tab 點(diǎn)擊切換實(shí)例代碼
Tab 選項(xiàng)卡切換效果在現(xiàn)如今的網(wǎng)頁(yè)中,運(yùn)用的也是比較多的,包括點(diǎn)擊切換、滑動(dòng)切換、延遲切換、自動(dòng)切換等多種效果,在這篇博文里,我們是通過(guò)原生 JavaScript 來(lái)實(shí)現(xiàn) Tab 點(diǎn)擊切換的效果
1. 功能實(shí)現(xiàn)
html 部分
<button style="background-color:#f60; color: #fff;">按鈕1</button> <button>按鈕2</button> <button>按鈕3</button> <div style="display:block;">第一個(gè)Nian糕</div> <div>第二個(gè)Nian糕</div> <div>第三個(gè)Nian糕</div>
css 部分
div {
display: none;
width: 155px;
height: 100px;
border: 1px solid #000;
}
接下來(lái)是 JS 部分,根據(jù)每一步要實(shí)現(xiàn)的功能,進(jìn)而轉(zhuǎn)換成代碼,每當(dāng)我們要實(shí)現(xiàn)一個(gè)效果的時(shí)候,先不要急著去敲代碼,而是先思考要怎么去實(shí)現(xiàn),結(jié)構(gòu)是什么樣的,某個(gè)功能需要用到什么事件等等,自己在腦海里把整個(gè)流程過(guò)一遍,再去把每一步的邏輯轉(zhuǎn)換成代碼
a. 獲取元素
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");
注釋?zhuān)?document.getElementsByTagName 返回的是一個(gè)[類(lèi)數(shù)組對(duì)象],可以使用數(shù)組的方法對(duì)其進(jìn)行處理,但類(lèi)數(shù)組對(duì)象并不具有數(shù)組所具有的方法
b. 給元素綁定點(diǎn)擊事件
//第一個(gè)按鈕的點(diǎn)擊事件
btnList[0].onclick = function () {
btnList[0].style.color = "#fff";
btnList[0].style.backgroundColor = "#f60";
btnList[1].style.color = "";
btnList[1].style.backgroundColor = "";
btnList[2].style.color = "";
btnList[2].style.backgroundColor = "";
divList[0].style.display = "block";
divList[1].style.display = "none";
divList[2].style.display = "none";
}
//第二個(gè)按鈕的點(diǎn)擊事件
btnList[1].onclick = function () {
btnList[0].style.color = "";
btnList[0].style.backgroundColor = "";
btnList[1].style.color = "#fff";
btnList[1].style.backgroundColor = "#f60";
btnList[2].style.color = "";
btnList[2].style.backgroundColor = "";
divList[0].style.display = "none";
divList[1].style.display = "block";
}
//第三個(gè)按鈕的點(diǎn)擊事件
btnList[2].onclick = function () {
btnList[0].style.color = "";
btnList[0].style.backgroundColor = "";
btnList[1].style.color = "";
btnList[1].style.backgroundColor = "";
btnList[2].style.color = "#fff";
btnList[2].style.backgroundColor = "#f60";
divList[0].style.display = "none";
divList[1].style.display = "none";
divList[2].style.display = "block";
}
現(xiàn)在我們已經(jīng)實(shí)現(xiàn)了一個(gè) Tab 切換的效果了,來(lái)看一下效果

雖然很簡(jiǎn)陋,但已經(jīng)達(dá)到我們想要的效果了,讀者可根據(jù)自己想要的樣式來(lái)設(shè)置 CSS,接下來(lái)我們要做的就是,對(duì) JS 代碼進(jìn)行優(yōu)化
2. 優(yōu)化
a. 獲取元素
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");
b. 給每一個(gè) button 元素綁定點(diǎn)擊事件
for(var i = 0; i < btnList.length; i++ ) {
btnList[i].index = i; //給每個(gè)按鈕添加index屬性,標(biāo)記是第幾個(gè)按鈕
btnList[i].onclick = function() {
for(var j = 0; j < btnList.length; j++) {
//將所有的按鈕樣式去掉,塊隱藏
btnList[j].style.color = "";
btnList[j].style.backgroundColor = "";
divList[j].style.display = "none";
}
//給點(diǎn)擊的按鈕添加樣式,對(duì)應(yīng)的塊顯示
this.style.color = "#fff";
this.style.backgroundColor = "#f60";
divList[this.index].style.display = "block";
}
}
index 返回字符位置,它是被搜索字符串中第一個(gè)成功匹配的開(kāi)始位置,從零開(kāi)始
this 是 Javascript 的一個(gè)關(guān)鍵字,它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用 this,關(guān)于 this 的值,會(huì)跟隨函數(shù)使用場(chǎng)景的不同而發(fā)生變化,但是我們只需要記住一個(gè)原則就可以了,this 指的是調(diào)用函數(shù)的那個(gè)對(duì)象
在這里 this 指向?qū)?yīng)的點(diǎn)擊按鈕,我們可以通過(guò)控制臺(tái)打印來(lái)看到 this 所輸出的內(nèi)容

3. Let 命令
ES 6 中新增了 let 命令,用來(lái)聲明變量,其用法類(lèi)似于 var,但是所聲明的變量,只在 let 命令所在的代碼塊內(nèi)有效

在上面的代碼中,我們?cè)诖a塊里,分別用 var 和 let 聲明了兩個(gè)變量,接著在代碼塊內(nèi)外打印這兩個(gè)變量,可以看到,var 聲明的變量返回了正確的值,代碼塊內(nèi)打印 let 聲明的變量返回了正確的值,而在代碼塊外打印 let 聲明的變量報(bào)錯(cuò),這表明,let 聲明的變量只在它所在的代碼塊有效


上面代碼中,變量 i 是 var 聲明的,在全局范圍內(nèi)都有效,所以全局只有一個(gè)變量 i,每一次循環(huán),變量 i 的值都會(huì)發(fā)生改變,而循環(huán)內(nèi)被賦給數(shù)組 a 的 function 在運(yùn)行時(shí),會(huì)通過(guò)閉包讀到這同一個(gè)變量 i,導(dǎo)致最后輸出的是最后一輪的 i 的值,也就是 10,而如果使用 let,聲明的變量?jī)H在塊級(jí)作用域內(nèi)有效,最后輸出的是 6
a. 獲取元素
var btnList = document.getElementsByTagName("button");
var divList = document.getElementsByTagName("div");
b. 給每一個(gè) button 元素綁定點(diǎn)擊事件
for(let i = 0; i < btnLists.length; i++) {
btnLists[i].onclick = function() {
for(var j = 0;j < btnLists.length;j++){
btnLists[j].style.color="";
btnLists[j].style.backgroundColor="";
divLists[j].style.display="none";
}
this.style.color = "yellow";
this.style.backgroundColor="#f60";
divLists[i].style.display="block";
}
}
同樣的,我們也是控制臺(tái)來(lái)打印一下 i 的值

End of File
行文過(guò)程中出現(xiàn)錯(cuò)誤或不妥之處在所難免,希望大家能夠給予指正,以免誤導(dǎo)更多人,也希望大家多多支持腳本之家。
- JavaScript實(shí)現(xiàn)的簡(jiǎn)單Tab點(diǎn)擊切換功能示例
- JS實(shí)現(xiàn)淡藍(lán)色簡(jiǎn)潔豎向Tab點(diǎn)擊切換效果
- 簡(jiǎn)單純js實(shí)現(xiàn)點(diǎn)擊切換TAB標(biāo)簽實(shí)例
- js實(shí)現(xiàn)點(diǎn)擊切換TAB標(biāo)簽實(shí)例
- Vue.js點(diǎn)擊切換按鈕改變內(nèi)容的實(shí)例講解
- JS實(shí)現(xiàn)的簡(jiǎn)單標(biāo)簽點(diǎn)擊切換功能示例
- 原生JS實(shí)現(xiàn)隱藏顯示圖片 JS實(shí)現(xiàn)點(diǎn)擊切換圖片效果
- JavaScript實(shí)現(xiàn)點(diǎn)擊切換功能
- JavaScript實(shí)現(xiàn)多個(gè)重疊層點(diǎn)擊切換效果的方法
- JavaScript實(shí)現(xiàn)Tab點(diǎn)擊切換
相關(guān)文章
JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-02-02
bootstrap導(dǎo)航、選項(xiàng)卡實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了bootstrap導(dǎo)航、選項(xiàng)卡的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
JavaScript原始數(shù)據(jù)類(lèi)型Symbol的用法詳解
Symbol是ES6中引入的一種新的基本數(shù)據(jù)類(lèi)型,用于表示一個(gè)獨(dú)一無(wú)二的值。它是JavaScript中的第七種數(shù)據(jù)類(lèi)型。本文將詳細(xì)講講Symbol的使用,需要的可以參考一下2022-11-11
微信小程序前后端數(shù)據(jù)交互的詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于微信小程序前后端數(shù)據(jù)交互的相關(guān)資料,通過(guò)小程序向后端發(fā)送請(qǐng)求,然后后端從數(shù)據(jù)庫(kù)獲取車(chē)源和求購(gòu)的數(shù)量反饋給小程序,最后將這兩個(gè)數(shù)據(jù)顯示出來(lái),需要的朋友可以參考下2022-10-10
關(guān)于JS中的方法是否加括號(hào)的問(wèn)題
在我們js編寫(xiě)程序的時(shí)候,我們會(huì)寫(xiě)很多函數(shù)然后調(diào)用它們,那么這些函數(shù)調(diào)用的時(shí)候什么時(shí)候加()什么時(shí)候不加()呢?下面小編給大家簡(jiǎn)單介紹下2016-07-07
JS基于cookie實(shí)現(xiàn)來(lái)賓統(tǒng)計(jì)記錄訪(fǎng)客信息的方法
這篇文章主要介紹了JS基于cookie實(shí)現(xiàn)來(lái)賓統(tǒng)計(jì)記錄訪(fǎng)客信息的方法,通過(guò)javascript記錄訪(fǎng)客信息到cookie的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
layui監(jiān)聽(tīng)復(fù)選框checkbox選中以及分頁(yè)選中處理方式
這篇文章主要介紹了layui監(jiān)聽(tīng)復(fù)選框checkbox選中以及分頁(yè)選中處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2019-09-09

