亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

跨瀏覽器通用、可重用的選項(xiàng)卡tab切換js代碼

 更新時(shí)間:2011年09月20日 22:33:06   投稿:mdxy-dxy  
今天一同學(xué)對(duì)我說(shuō)“好吧,我準(zhǔn)備去學(xué)習(xí)”,我大驚,這老勾引我打dota的也去學(xué)習(xí),于是我好奇他學(xué)什么,他說(shuō)要搞一個(gè)選項(xiàng)卡切換js

由于近來(lái)學(xué)了點(diǎn)js,于是我裝逼道。。。不太難吧。。。就切一下display屬性?同學(xué)無(wú)視我。。說(shuō)要搞個(gè)通用的。。。什么還要跟ajax交互。。???我愣是沒(méi)有聽(tīng)懂。。。到底要搞什么。。。權(quán)當(dāng)作練手,我自己胡弄了一個(gè)。
  需求:同學(xué)口中的通用我不知道神馬意思。。。那我就按自己的理解吧。。
   ?、倏鐬g覽器,IE6+,F(xiàn)F,Chrome,Safari,Opera
   ?、谕粋€(gè)頁(yè)面可以用同一個(gè)js設(shè)置不同的選項(xiàng)卡。
  說(shuō)太多沒(méi)啥米用,來(lái)看代碼吧。
一、html部分(其實(shí)這還沒(méi)啥好看的,設(shè)置了三個(gè),前兩個(gè)是一樣的,通過(guò)click事件觸發(fā),最后一個(gè)通過(guò)鼠標(biāo)移動(dòng)觸發(fā))

復(fù)制代碼 代碼如下:

<div class="tab1">
<ul class="name">
<li>項(xiàng)目一</li>
<li>項(xiàng)目二</li>
<li>項(xiàng)目三</li>
</ul>
<ul class="content">
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目一內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目二內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目三內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
</ul>
</div>
<div class="tab1">
<ul class="name">
<li>項(xiàng)目一</li>
<li>項(xiàng)目二</li>
<li>項(xiàng)目三</li>
</ul>
<ul class="content">
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目一內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目二內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab1"</em>項(xiàng)目三內(nèi)容,通過(guò)<em>"click"</em>觸發(fā)</li>
</ul>
</div>
<div class="tab2">
<ul class="name">
<li>項(xiàng)目一</li>
<li>項(xiàng)目二</li>
<li>項(xiàng)目三</li>
</ul>
<ul class="content">
<li>類(lèi)為<em>"tab2"</em>項(xiàng)目一內(nèi)容,通過(guò)<em>"mouseover"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab2"</em>項(xiàng)目二內(nèi)容,通過(guò)<em>"mouseover"</em>觸發(fā)</li>
<li>類(lèi)為<em>"tab2"</em>"項(xiàng)目三內(nèi)容,通過(guò)<em>"mouseover"</em>觸發(fā)</li>
</ul>
</div>

特別聲明,由于我是菜鳥(niǎo),所以,我寫(xiě)的js只能在某種特定的結(jié)構(gòu)下運(yùn)作(真菜!),沒(méi)有想到怎么搞個(gè)極致的通用機(jī)制。這個(gè)js需要怎樣的結(jié)構(gòu)?那就是最外層一個(gè)div容器,標(biāo)題由一個(gè)ul列表表示,內(nèi)容也是一個(gè)ul列表。如果不是這種格式,我寫(xiě)的菜鳥(niǎo)代碼是無(wú)法運(yùn)行的(菜啊。。。),要運(yùn)行,就要改改其中的幾行js啦。。。
二、樣式CSS
復(fù)制代碼 代碼如下:

body{
text-align:center;
}
.tab1, .tab2 {
width:350px;
margin:0 5px;
background:#CC9933;
opacity:0.5;
border-radius:5px 5px 5px 5px;
box-shadow: #CCC 4px 4px 4px;
text-align:left;
float:left;
display:inline;
}
.name {
list-style:none;
overflow:hidden;
}
.name li {
width:90px;
font:bold 16px/30px Verdana, Geneva, sans-serif;
background:#669900;
text-align:center;
border-radius:5px 5px 5px;
margin-right:5px;
float:left;
display:inline;
cursor:pointer;
}
li.selected{
background:#FF9900;
}
.content li{
height:500px;
display:none;
}

 這貌似沒(méi)什么好說(shuō)的,加了些最簡(jiǎn)單的css3,湊合著(這美工好爛啊)。
三、js代碼
復(fù)制代碼 代碼如下:

/**
* 事件處理通用函數(shù)
*/
var EventUtil = {
//跨瀏覽器取事件對(duì)象event
getEvent : function(event){
return event ? event : window.event;
},
//款瀏覽器取事件對(duì)象的目標(biāo)DOM節(jié)點(diǎn)
getTarget : function(event){
return event.target||event.srcElement;
},
//跨瀏覽器對(duì)節(jié)點(diǎn)進(jìn)行事件綁定
addHandler : function(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);
}else{
element["on"+type] = handler;
}
}
};
//設(shè)置選項(xiàng)卡切換方式
tabSwitch("tab1","click");
tabSwitch("tab2","mouseover");
/**
* 選項(xiàng)卡通用函數(shù)
*/
// 傳入?yún)?shù)inClassName設(shè)定為綁定的選項(xiàng)卡類(lèi)名,參數(shù)triggerType設(shè)定為觸發(fā)切換的類(lèi)型
function tabSwitch(inClassName,triggerType){
//取得全部選項(xiàng)卡區(qū)域
if(document.querySelectorAll){
var tabs = document.querySelectorAll("."+inClassName);
}else{
var divs = document.getElementsByTagName("div");
var tabs = new Array();
for(var k=0,lenDiv=divs.length; k<lenDiv; k++){
if(divs[k].className.indexOf(inClassName) > -1){
tabs.push(divs[k]);
}
}
}
//為每個(gè)選項(xiàng)卡建立切換功能
for(var j=0,len=tabs.length; j<len; j++){
//獲取標(biāo)題和內(nèi)容列表
var tab = tabs[j];
//使用私有作用域?yàn)槊總€(gè)選項(xiàng)卡建立切換
(function(){
var nameUl = tab.getElementsByTagName("ul")[0];
var content = tab.getElementsByTagName("ul")[1];
//初始化選項(xiàng)卡
nameUl.getElementsByTagName("li")[0].className = "selected";
content.getElementsByTagName("li")[0].style.display = "block";
//添加事件委托
EventUtil.addHandler(nameUl,triggerType,function(event){
//獲取事件對(duì)象
event = EventUtil.getEvent(event);
var target = EventUtil.getTarget(event);
//選項(xiàng)卡切換
if(target.nodeName.toLowerCase() == "li"){
//分別取得標(biāo)題列表項(xiàng)和內(nèi)容列表項(xiàng)
var nameList = nameUl.getElementsByTagName("li");
var contentList = content.getElementsByTagName("li");
//標(biāo)題添加selected類(lèi),并顯示內(nèi)容
for(var i=0,len=nameList.length; i<len; i++){
nameList[i].className = "";
contentList[i].style.display = "none";
if(nameList[i] == target){
nameList[i].className = "selected";
contentList[i].style.display = "block";
}
}
}
});
})();
}
}

就這js函數(shù),我們展開(kāi)一下吧(很不害羞?。?。。首先定義了一些事件對(duì)象的通用函數(shù),以應(yīng)對(duì)跨瀏覽器時(shí)的使用。接著兩行是選項(xiàng)卡切換的函數(shù)。一個(gè)參數(shù)是要定義為選項(xiàng)卡的容器的類(lèi),一個(gè)是觸發(fā)切換的類(lèi)型。
  完了就是真正的js,思路是:定義為某個(gè)類(lèi)的容器將會(huì)綁定成一個(gè)選項(xiàng)卡,切換的方式也可以自定義。tabSwitch("tab1","click");就是所有tab1類(lèi)都綁定為選項(xiàng)卡,通過(guò)click事件切換。
  實(shí)現(xiàn)切換用到了幾個(gè)技術(shù),其一,通過(guò)類(lèi)選擇器selectqueryAll對(duì)同一類(lèi)型進(jìn)行選擇,為了兼容IE6、7,做了一個(gè)備用的遍歷版本(非常低效);其二,使用了事件委托,在標(biāo)題列表ul上綁定了觸發(fā)事件。
  
  抱怨一下,在取ul的DOM元素時(shí),我用了name作為變量名,結(jié)果在chrome和safari綁定不了事件,這里搞了我好久啊!非常郁悶。。。
  最后一提的是效果,這個(gè)東西有什么效果?就是選項(xiàng)卡切換(廢話。。),選中的選項(xiàng)卡標(biāo)題會(huì)添加一個(gè)類(lèi)“selected”,方便設(shè)定樣式。
  最后的最后,我想說(shuō),還真有很多要改進(jìn)的地方(當(dāng)然的,你又不是pis神)。例如,涉及類(lèi)添加時(shí),類(lèi)名的字符串并接保證原有類(lèi)名不覆蓋。例如,可以應(yīng)對(duì)一下結(jié)構(gòu)變換的適應(yīng)能力。例如(好多問(wèn)題?。?。。。
  至于還有什么毛病,請(qǐng)各位大俠指導(dǎo)了(這人臉皮厚,盡管?chē)姡?br />  按道理要上傳demo的?點(diǎn)此實(shí)例下載

相關(guān)文章

  • JavaScript的各種常見(jiàn)函數(shù)定義方法

    JavaScript的各種常見(jiàn)函數(shù)定義方法

    這篇文章主要介紹了JavaScript的各種常見(jiàn)函數(shù)定義方法,包含了一些技巧的測(cè)試與分析總結(jié),需要的朋友可以參考下
    2014-09-09
  • 詳解ES6 中的Object.assign()的用法實(shí)例代碼

    詳解ES6 中的Object.assign()的用法實(shí)例代碼

    這篇文章主要介紹了ES6 Object.assign()的用法及用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • JS實(shí)現(xiàn)方向鍵切換輸入框焦點(diǎn)的方法

    JS實(shí)現(xiàn)方向鍵切換輸入框焦點(diǎn)的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)方向鍵切換輸入框焦點(diǎn)的方法,涉及javascript鼠標(biāo)事件及頁(yè)面元素焦點(diǎn)的切換實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • JS canvas繪制五子棋的棋盤(pán)

    JS canvas繪制五子棋的棋盤(pán)

    這篇文章主要為大家詳細(xì)介紹了JS canvas繪制五子棋棋盤(pán)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 微信小程序判斷頁(yè)面是否從其他頁(yè)面返回的實(shí)例代碼

    微信小程序判斷頁(yè)面是否從其他頁(yè)面返回的實(shí)例代碼

    這篇文章主要介紹了微信小程序判斷頁(yè)面是否從其他頁(yè)面返回的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • JS實(shí)現(xiàn)星星海特效

    JS實(shí)現(xiàn)星星海特效

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)星星海特效特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • JavaScript事件委托技術(shù)實(shí)例分析

    JavaScript事件委托技術(shù)實(shí)例分析

    這篇文章主要介紹了JavaScript事件委托技術(shù),實(shí)例分析了事件委托技術(shù)的原理、適用場(chǎng)合及用法實(shí)例,需要的朋友可以參考下
    2015-02-02
  • H5如何實(shí)現(xiàn)喚起APP及調(diào)試bug解決

    H5如何實(shí)現(xiàn)喚起APP及調(diào)試bug解決

    這篇文章主要為大家介紹了H5如何實(shí)現(xiàn)喚起APP及調(diào)試bug解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • eslint 的三大通用規(guī)則詳解

    eslint 的三大通用規(guī)則詳解

    這篇文章主要介紹了eslint 的三大通用規(guī)則詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • BootStrap的雙日歷時(shí)間控件使用

    BootStrap的雙日歷時(shí)間控件使用

    這段時(shí)間看了下bootstrap的時(shí)間控件,發(fā)現(xiàn)使用起來(lái)還是很簡(jiǎn)單的,趁著有時(shí)間的時(shí)候整理了一下,特此分享到腳本之家平臺(tái),感興趣的朋友參考下
    2017-07-07

最新評(píng)論