結(jié)構(gòu)/表現(xiàn)/行為完全分離的選項(xiàng)卡(jquery版和原生JS版)
更新時(shí)間:2010年08月13日 23:27:54 作者:
日常項(xiàng)目中常用到的,用jQuery和原生JS分別寫了一個(gè). 兩種寫法均實(shí)現(xiàn)了結(jié)構(gòu)/表現(xiàn)/行為的完全分離.當(dāng)然,稍作修改,可以在同一個(gè)頁(yè)面中應(yīng)用于多個(gè)選項(xiàng)卡.
關(guān)于思路,和常規(guī)選項(xiàng)卡思路一樣.點(diǎn)擊選項(xiàng)菜單,突出顯示,并顯示對(duì)應(yīng)的選項(xiàng).本文實(shí)例中主要是通過判斷點(diǎn)擊菜單在菜單列表中的索引位置來顯示或隱藏選項(xiàng)區(qū).原生js還有很多種實(shí)現(xiàn)方法(藍(lán)色理想中搜索),為了與jQ版思路保持一致,本文實(shí)例用的是循環(huán)判斷. 詳見注釋.
另有幾點(diǎn)說明:
1. 通過本文DEMO演示,可以很明顯的看到原生JS的window.onload=function(){…}與jQuery的$(document).ready(function(){…});的區(qū)別,這也是我為什么不用樣式定義初始狀態(tài)下隱藏第二三個(gè)顯示區(qū)的原因;
2. 本文只是選項(xiàng)卡一個(gè)原型實(shí)現(xiàn),若要用于同一頁(yè)面多個(gè)選項(xiàng)卡,變量已集中到函數(shù)頭部,可自行封裝成函數(shù);
3. 請(qǐng)不要問如何實(shí)現(xiàn)更酷很炫的效果,請(qǐng)自已思考添加效果;
4. 不希望大家用這個(gè)效果時(shí)只是機(jī)械的復(fù)制粘貼,思考加實(shí)踐,然后消化成自己的.
查看演示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
核心代碼:
//jQ版本
$(function(){
var _tab=$('ul.tabnav>li');//獲取選項(xiàng)卡導(dǎo)航
var _box=$('.tabbox div');//獲取內(nèi)容切換區(qū)
var _hover='hover';//當(dāng)前點(diǎn)擊顯示的樣式
var _index;//索引值
_tab.eq(0).addClass(_hover);//第一個(gè)導(dǎo)航高亮顯示
_tab.click(function(){
_index=_tab.index(this);//獲取當(dāng)前點(diǎn)擊的索引值
$(this).addClass(_hover).siblings().removeClass(_hover);//當(dāng)前點(diǎn)擊高亮顯示
_box.eq(_index).show().siblings().hide();//通過索引值讓對(duì)應(yīng)的選項(xiàng)內(nèi)容區(qū)顯示
}).eq(0).click();
});
//原生JS版本
window.onload=function(){
var tabnav=document.getElementById('tabnav');
var list=tabnav.getElementsByTagName('li');
var tabbox=document.getElementById('tabbox');
var divs=tabbox.getElementsByTagName('div');
var hover='hover';//當(dāng)前點(diǎn)擊顯示的樣式
var indexValue=function(self,obj){//獲取索引值的函數(shù),通過它獲取當(dāng)前點(diǎn)擊在導(dǎo)航中的索引位置
for(var i=0;i<obj.length;i++){
if(obj[i]==self) return i;
}
};
var index;
list[0].className=hover;//第一個(gè)默認(rèn)高亮,建議在頁(yè)面中直接定義
for(var k=1;k<divs.length;k++){//我為了省事,用一個(gè)for循環(huán)定義默認(rèn)顯示第一個(gè)切換區(qū)塊,其他隱藏.這個(gè)最好用CSS定義,能避免頁(yè)面加載時(shí)它全部顯示出來.
divs[k].style.display='none';
}
for(var l=0;l<list.length;l++){//點(diǎn)擊事件
list[l].onclick=function(){
index=indexValue(this,list);//利用前面定義的indexValue函數(shù)取當(dāng)前點(diǎn)擊在選項(xiàng)導(dǎo)航中的索引值,
for(var m=0;m<list.length;m++){
list[m].className= (m==index) ? hover : '';//高亮顯示點(diǎn)擊項(xiàng)并移除其他項(xiàng)高亮
}
for(var n=0;n<divs.length;n++){
divs[n].style.display= (n==index) ? 'block' : 'none';//顯示點(diǎn)擊對(duì)應(yīng)的選項(xiàng)區(qū),隱藏其他
}
}
}
}
另有幾點(diǎn)說明:
1. 通過本文DEMO演示,可以很明顯的看到原生JS的window.onload=function(){…}與jQuery的$(document).ready(function(){…});的區(qū)別,這也是我為什么不用樣式定義初始狀態(tài)下隱藏第二三個(gè)顯示區(qū)的原因;
2. 本文只是選項(xiàng)卡一個(gè)原型實(shí)現(xiàn),若要用于同一頁(yè)面多個(gè)選項(xiàng)卡,變量已集中到函數(shù)頭部,可自行封裝成函數(shù);
3. 請(qǐng)不要問如何實(shí)現(xiàn)更酷很炫的效果,請(qǐng)自已思考添加效果;
4. 不希望大家用這個(gè)效果時(shí)只是機(jī)械的復(fù)制粘貼,思考加實(shí)踐,然后消化成自己的.
查看演示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
核心代碼:
復(fù)制代碼 代碼如下:
//jQ版本
$(function(){
var _tab=$('ul.tabnav>li');//獲取選項(xiàng)卡導(dǎo)航
var _box=$('.tabbox div');//獲取內(nèi)容切換區(qū)
var _hover='hover';//當(dāng)前點(diǎn)擊顯示的樣式
var _index;//索引值
_tab.eq(0).addClass(_hover);//第一個(gè)導(dǎo)航高亮顯示
_tab.click(function(){
_index=_tab.index(this);//獲取當(dāng)前點(diǎn)擊的索引值
$(this).addClass(_hover).siblings().removeClass(_hover);//當(dāng)前點(diǎn)擊高亮顯示
_box.eq(_index).show().siblings().hide();//通過索引值讓對(duì)應(yīng)的選項(xiàng)內(nèi)容區(qū)顯示
}).eq(0).click();
});
//原生JS版本
復(fù)制代碼 代碼如下:
window.onload=function(){
var tabnav=document.getElementById('tabnav');
var list=tabnav.getElementsByTagName('li');
var tabbox=document.getElementById('tabbox');
var divs=tabbox.getElementsByTagName('div');
var hover='hover';//當(dāng)前點(diǎn)擊顯示的樣式
var indexValue=function(self,obj){//獲取索引值的函數(shù),通過它獲取當(dāng)前點(diǎn)擊在導(dǎo)航中的索引位置
for(var i=0;i<obj.length;i++){
if(obj[i]==self) return i;
}
};
var index;
list[0].className=hover;//第一個(gè)默認(rèn)高亮,建議在頁(yè)面中直接定義
for(var k=1;k<divs.length;k++){//我為了省事,用一個(gè)for循環(huán)定義默認(rèn)顯示第一個(gè)切換區(qū)塊,其他隱藏.這個(gè)最好用CSS定義,能避免頁(yè)面加載時(shí)它全部顯示出來.
divs[k].style.display='none';
}
for(var l=0;l<list.length;l++){//點(diǎn)擊事件
list[l].onclick=function(){
index=indexValue(this,list);//利用前面定義的indexValue函數(shù)取當(dāng)前點(diǎn)擊在選項(xiàng)導(dǎo)航中的索引值,
for(var m=0;m<list.length;m++){
list[m].className= (m==index) ? hover : '';//高亮顯示點(diǎn)擊項(xiàng)并移除其他項(xiàng)高亮
}
for(var n=0;n<divs.length;n++){
divs[n].style.display= (n==index) ? 'block' : 'none';//顯示點(diǎn)擊對(duì)應(yīng)的選項(xiàng)區(qū),隱藏其他
}
}
}
}
您可能感興趣的文章:
相關(guān)文章
jQuery操作checkbox選擇(list/table)
本文將介紹下checkbox list選擇及checkbox table選中附效果圖,感興趣的朋友可以參考下哈,希望可以幫助到你2013-04-04
用jquery與css打造個(gè)性化的單選框和復(fù)選框
利用jquery和css打造個(gè)性化的單選框和復(fù)選框,喜歡的朋友可以參考下。2010-10-10
利用JQuery制作符合Web標(biāo)準(zhǔn)的QQ彈出消息
本篇文章主要介紹了利用JQuery制作符合Web標(biāo)準(zhǔn)的QQ彈出消息。這里所說的彈出消息指的是在網(wǎng)頁(yè)右下角升起又下去的那種框框,在這里用到了jQuery的自定義動(dòng)畫2014-01-01
jquery簡(jiǎn)單實(shí)現(xiàn)滾動(dòng)條下拉DIV固定在頭部不動(dòng)
滾動(dòng)條下拉DIV固定在頭部不動(dòng)效果,想必很多的朋友都有見到過吧,下面為大家詳細(xì)介紹下使用jquery是如何實(shí)現(xiàn)的,感興趣的朋友可以參考下2013-11-11
jQuery 類twitter的文本字?jǐn)?shù)限制帶提示效果插件
基于jquery的仿twitter的文本字?jǐn)?shù)限制帶提示效果插件,這里提示比較好,不是簡(jiǎn)單的限制,給用戶更好的體驗(yàn)。2010-04-04

