基于JS實(shí)現(xiàn)網(wǎng)頁中的選項(xiàng)卡(兩種方法)
網(wǎng)頁中經(jīng)常會(huì)用到選項(xiàng)卡這種東東,說白了就是點(diǎn)擊一個(gè)選項(xiàng),下面會(huì)彈出這個(gè)選項(xiàng)里的內(nèi)容。
方法一:
方法一利用簡單的代碼即可實(shí)現(xiàn),以下是全部的代碼;
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>選項(xiàng)卡</title> <style type="text/css"> *{margin: 0;padding: 0;} #box{width: 600px;background: #ccc;margin: 0 auto;} li{list-style: none;} #ul1{display: block; width: 100%;overflow: hidden;} #ul1 li{width:110px;height: 40px;background: #4cfed2;float: left;margin-left: 8px;text-align: center;line-height: 40px;} #content{width: 100%;margin-top: 20px;} #content div{display: none;} #content div.active{display: block;} .show{background: red;} </style> </head> <body> <div id="box"> <ul id="ul1"> <li>首頁</li> <li>產(chǎn)品</li> <li>新聞</li> <li>聯(lián)系</li> <li>我的</li> </ul> <div id="content"> <div class="active"> <ul> <li>new1</li> <li>new2</li> <li>new3</li> </ul> </div> <div> <ul> <li>new4</li> <li>new5</li> <li>new6</li> </ul> </div> <div> <ul> <li>new7</li> <li>new8</li> <li>new9</li> </ul> </div> <div> <ul> <li>new10</li> <li>new11</li> <li>new12</li> </ul> </div> <div> <ul> <li>new13</li> <li>new14</li> <li>new15</li> </ul> </div> </div> </div> <script type="text/javascript"> window.onload=function(){ var oli=document.getElementById("ul1").getElementsByTagName("li"); //alert(oli.length); var odiv=document.getElementById("content").getElementsByTagName("div"); //alert(odiv.length) for(var i=0;i<oli.length;i++){ oli[i]._index=i; oli[i].onclick=function(){ //alert(i); for(i=0;i<oli.length;i++){ oli[i].className=''; odiv[i].style.display='none'; } this.className='show'; odiv[this._index].style.display='block'; } } } </script> </body> </html>
首先我們在HTML部分定義網(wǎng)頁選項(xiàng)卡中的內(nèi)容。
<div id="box"> <ul id="ul1"><!--選項(xiàng)卡中的點(diǎn)擊部分--> <li>首頁</li> <li>產(chǎn)品</li> <li>新聞</li> <li>聯(lián)系</li> <li>我的</li> </ul> <div id="content"> <div class="active"><!--選項(xiàng)卡中要顯示和被顯示的部分--> <ul> <li>new1</li> <li>new2</li> <li>new3</li> </ul> </div> <div> <ul> <li>new4</li> <li>new5</li> <li>new6</li> </ul> </div> <div> <ul> <li>new7</li> <li>new8</li> <li>new9</li> </ul> </div> <div> <ul> <li>new10</li> <li>new11</li> <li>new12</li> </ul> </div> <div> <ul> <li>new13</li> <li>new14</li> <li>new15</li> </ul> </div> </div> </div>
CSS部分對HTML中的內(nèi)容進(jìn)行修飾:
<style type="text/css"> *{margin: 0;padding: 0;} #box{width: 600px;background: #ccc;margin: 0 auto;} li{list-style: none;} #ul1{display: block; width: 100%;overflow: hidden;} #ul1 li{width:110px;height: 40px;background: #4cfed2;float: left;margin-left: 8px;text-align: center;line-height: 40px;} #content{width: 100%;margin-top: 20px;} #content div{display: none;} #content div.active{display: block;} .show{background: red;} </style>
最后是最重要的js部分:
<script type="text/javascript"> window.onload=function(){ var oli=document.getElementById("ul1").getElementsByTagName("li"); //alert(oli.length); var odiv=document.getElementById("content").getElementsByTagName("div");//提取HTML中的元素 //alert(odiv.length) for(var i=0;i<oli.length;i++){ oli[i]._index=i; oli[i].onclick=function(){ //alert(i); for(i=0;i<oli.length;i++){ oli[i].className=''; odiv[i].style.display='none'; } this.className='show'; odiv[this._index].style.display='block'; } } } </script>
JS語句中的第一個(gè)for循環(huán)是為了取得所有的選項(xiàng)卡中的點(diǎn)擊部分;因?yàn)镮這個(gè)變量在下面的事件函數(shù)中無法訪問到,所以每次點(diǎn)擊時(shí),i變量循環(huán)到oli.length值。因此將i的值交給一個(gè)我們自定義的元素屬性上來保存循環(huán)中i的值,供下面使用。即:oli[i]._index=i;
添加點(diǎn)擊函數(shù)后,第二個(gè)for循環(huán)是為了把所有的oli的className改為“空”和所有的odiv的style為display='none';循環(huán)結(jié)束后,在給當(dāng)前點(diǎn)擊的這個(gè)oli添加className和下面相應(yīng)的odiv的style為display='block';
以下是運(yùn)行的結(jié)果:
在編寫程序時(shí)一定要注意,選項(xiàng)卡中的點(diǎn)擊部分即:li的數(shù)量(JS里oli.length)要和下面ID為content的div里包含的div數(shù)量(JS里odiv.length)相同,我在編寫程序時(shí)就因?yàn)閛li.length與odiv.length不相等,導(dǎo)致程序報(bào)錯(cuò),但是好長時(shí)間都找不到錯(cuò)誤;總而言之還是要多多細(xì)心。
方法二:
方法一適用于選項(xiàng)卡比較少的情況,但如果選項(xiàng)卡內(nèi)容較多時(shí)我們要用到這種方法,第二種方法運(yùn)用到了這周我們老師講的一個(gè)在JS種比較重要的知識點(diǎn):自運(yùn)行函數(shù)
(function a(){ //函數(shù)里的內(nèi)容 })(參數(shù));
定義函數(shù)a();給整個(gè)函數(shù)帶上括號,后面的括號為輸入?yún)?shù);
以下為方法二自運(yùn)行函數(shù)的程序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>多個(gè)tab選項(xiàng)卡</title> <script> window.onload = function() { tab("tabMain", "click"); tab("tabMain1", "click"); tab("tabMain2", "click"); tab("tabMain4", "click"); function tab(id, event) { var oDiv = document.getElementById(id); var oBtn = oDiv.getElementsByTagName("li"); var oBox = oDiv.getElementsByTagName("div"); for(var i = 0; i < oBtn.length; i++) { //console.log(i) (function(index) {//自執(zhí)行函數(shù) oBtn[index].addEventListener(event, function() { for(var i = 0; i < oBtn.length; i++) { oBtn[i].className = ''; oBox[i].className = 'tabSide'; } this.className = 'active'; oBox[index].className = 'active'; });//添加事件監(jiān)聽 })(i) } } } </script> <style> * { padding: 0; margin: 0; list-style: none; } .tabMenu { width: 300px; margin: 50px auto 0 auto; } .tabMenu ul { display: block; overflow: hidden; width: 300px; height: 40px; background: #eee; } .tabMenu ul li { cursor: pointer; display: block; float: left; width: 100px; text-align: center; height: 40px; line-height: 40px; font-size: 16px; } .tabMenu ul li.active { background: #f00; color: #fff; } .tabMenu .tabSide { display: none; padding: 10px; line-height: 20px; width: 278px; border: solid 1px #eee; } .tabMenu div.active { display: block; padding: 10px; line-height: 20px; width: 278px; border: solid 1px #eee; } </style> </head> <body> <div id="tabMain" class="tabMenu"> <ul> <li class="active">tab1</li> <li>tab2</li> <li>tab3</li> </ul> <div class="tabSide active">內(nèi)容1</div> <div class="tabSide">內(nèi)容2</div> <div class="tabSide">內(nèi)容3</div> </div> <div id="tabMain1" class="tabMenu"> <ul> <li class="active">tab1</li> <li>tab2</li> <li>tab3</li> </ul> <div class="tabSide active">內(nèi)容1</div> <div class="tabSide">內(nèi)容2</div> <div class="tabSide">內(nèi)容3</div> </div> <div id="tabMain2" class="tabMenu"> <ul> <li class="active">tab1</li> <li>tab2</li> <li>tab3</li> </ul> <div class="tabSide active">內(nèi)容1</div> <div class="tabSide">內(nèi)容2</div> <div class="tabSide">內(nèi)容3</div> </div> <div id="tabMain4" class="tabMenu"> <ul> <li class="active">tab1</li> <li>tab2</li> <li>tab3</li> </ul> <div class="tabSide active">內(nèi)容1</div> <div class="tabSide">內(nèi)容2</div> <div class="tabSide">內(nèi)容3</div> </div> </body> </html>
和方法一相似先寫HTML里的內(nèi)容,CSS部分對HTML進(jìn)行修飾,我們直接來看JS部分;
<script> window.onload = function() { tab("tabMain", "click"); tab("tabMain1", "click"); tab("tabMain2", "click"); tab("tabMain4", "click"); function tab(id, event) { var oDiv = document.getElementById(id); var oBtn = oDiv.getElementsByTagName("li"); var oBox = oDiv.getElementsByTagName("div"); for(var i = 0; i < oBtn.length; i++) { //alert(i); (function(index) {//自執(zhí)行函數(shù) oBtn[index].addEventListener(event, function() { for(var i = 0; i < oBtn.length; i++) { oBtn[i].className = ''; oBox[i].className = 'tabSide'; } this.className = 'active'; oBox[index].className = 'active'; });//添加事件監(jiān)聽 })(i) } } } </script>
通過添加事件和自運(yùn)行函數(shù)完成多個(gè)選項(xiàng)卡。
- js實(shí)現(xiàn)簡單選項(xiàng)卡功能
- vuejs實(shí)現(xiàn)標(biāo)簽選項(xiàng)卡動(dòng)態(tài)更改css樣式的方法
- AngularJS標(biāo)簽頁tab選項(xiàng)卡切換功能經(jīng)典實(shí)例詳解
- js實(shí)現(xiàn)Tab選項(xiàng)卡切換效果
- AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法詳解
- js自定義Tab選項(xiàng)卡效果
- Vue.js tab實(shí)現(xiàn)選項(xiàng)卡切換
- 使用vue.js寫一個(gè)tab選項(xiàng)卡效果
- js鼠標(biāo)經(jīng)過tab選項(xiàng)卡時(shí)實(shí)現(xiàn)切換延遲
- JS實(shí)現(xiàn)選項(xiàng)卡效果的代碼實(shí)例
相關(guān)文章
JavaScript中實(shí)現(xiàn)map功能代碼分享
這篇文章主要介紹了JavaScript中實(shí)現(xiàn)map功能代碼分享,本文直接給出實(shí)現(xiàn)代碼,給出一個(gè)MAP類,類中包含大多數(shù)的常用方法,還可以自己擴(kuò)展,需要的朋友可以參考下2015-06-06javascript表單驗(yàn)證以及正則表達(dá)式舉例詳解
正則表達(dá)式描述了一種字符串匹配的模式,可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等,常用于表單驗(yàn)證等,下面這篇文章主要給大家介紹了關(guān)于javascript表單驗(yàn)證以及正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2023-05-05js eval函數(shù)使用,js對象和字符串互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)硪黄猨s eval函數(shù)使用,js對象和字符串互轉(zhuǎn)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03Javascript客戶端將指定區(qū)域?qū)С龅絎ord、Excel的代碼
Javascript 瀏覽器客戶端導(dǎo)出指定區(qū)域到Word、Excel,非常不錯(cuò)的應(yīng)用實(shí)例2008-10-10JS實(shí)現(xiàn)簡單獲取最近7天和最近3天日期的方法
這篇文章主要介紹了JS實(shí)現(xiàn)簡單獲取最近7天和最近3天日期的方法,涉及javascript針對日期與時(shí)間的相關(guān)數(shù)值運(yùn)算與轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-04-04js和C# 時(shí)間日期格式轉(zhuǎn)換的簡單實(shí)例
下面小編就為大家?guī)硪黄猨s和C# 時(shí)間日期格式轉(zhuǎn)換的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05js實(shí)現(xiàn)頭像上傳并且可預(yù)覽提交
這篇文章主要介紹了js如何實(shí)現(xiàn)頭像上傳并且可預(yù)覽提交,幫助大家更好的理解和使用js,感興趣的朋友可以了解下2020-12-12