以下用一個簡單的例子來闡述我想說的。

CSS代碼: 復制代碼 代碼如下: #nav li ul { display:none; } HTML代碼: 復制代碼 代碼如下: <div id="nav"> <ul class=""> <li> <h3> " /> 羞羞漫画免费漫画页面在线看漫画秋蝉 ,精品亚洲一区二区三区在线播放,欧美午夜精品A片一区二区HD

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

js+css在交互上的應用

但靈活應用CSS會有給人眼前一亮的感覺!

以下用一個簡單的例子來闡述我想說的。

CSS代碼:
復制代碼 代碼如下:
#nav li ul {
display:none;
}

HTML代碼:
復制代碼 代碼如下:
<div id="nav">
<ul class="">
<li>
<h3>菜單1</h3>
<ul>
<li>子菜單1</li>
<li>子菜單2</li>
<li>子菜單3</li>
<li>子菜單4</li>
</ul>
</li>
<li>
<h3>菜單2</h3>
<ul>
<li>子菜單1</li>
<li>子菜單2</li>
<li>子菜單3</li>
<li>子菜單4</li>
<li>子菜單4</li>
</ul>
</li>
</ul>
</div>

效果如下:

需要的效果是:

1、初始時,所有的子菜單都是隱藏的。

2、點擊菜單項,相應的子菜單列表顯示。

3、再點擊, 子菜單隱藏。

半年前的我的做法會是這樣:取得#nav中的h3元素,循環在其上添加事件。事件判斷其下一個兄弟節點是否隱藏,根據狀態修改子菜單ul元素的display屬性。

代碼大致如下:(以下所有代碼僅用于表達邏輯,請不要糾結于是否可執行。)
復制代碼 代碼如下:
var els = [...]; //代碼取得h3元素數組。
for(var i=0; i < els.length; i++) {
  els[i].addEventListener("click",function() {
    var target = this.nextSibling;
    if(target.style.display == "none")
      target.style.display = "block";
    else
      target.style.display = "none"
  }, false);
}

一個月前的話,做法大概是這樣:在#nav > ul上直接添加事件,在事件中判斷目標對象是否h3對象。如果是則取得下一個兄弟節點,并根據其顯示狀態來修改display屬性。
代碼大致如下:
復制代碼 代碼如下:
var container = document.getElementById("nav");
container.addEventListener("click", function(e) {
  var target = e.target, list;
  if(target.tagName == "H3") {
    list = target.nextSibling;
    if(list.style.display === "none")
      list.style.display = "block";
    else
      list.style.display = "none";
  }
}, false);

兩種做法,孰優孰劣請自行判斷。
前段時間做了一個需求,在代碼中看到另外的一種思路――這才是我在這里要說的――利用CSS來完成交互。
依然是代碼:
CSS代碼:
復制代碼 代碼如下:
#nav li.menu ul {
display:block;
}

JS代碼大致如下:
復制代碼 代碼如下:
var el = document.getElementById("nav");
el.addEventListener("click", function(e) {
  var target = e.target.parentNode;
  if(target.tagName == "LI") {
    if(target.className == "")
      target.className = "menu";
    }else {
      target.className = "";
    }
  }
}, false);

看看代碼,貌似第三種方法跟第二種差不多嘛。
恩~~,如果點擊h3元素不止是修改下一個ul元素的顯示狀態,比如還要修改h3的背景圖案呢?
這時候第二個方法需要在根據h3的background屬性來修改值,而第三種只需要添加一條樣式:#nav li.menu h3{background:url(...)}即可了。

其他的就沒什么好說了。大家都有自己的判斷,孰優孰劣心里自有評斷。

PS:
如果一個頁面存在別的樣式表影響了你的樣式,就會有個優先權的問題。我們都知道id,class和tag的優先級別,但是對一個表達式,它的優先權是怎么計算的呢?
請google一下,或者先看看《老調重彈的CSS優先級》。

JavaScript技術js+css在交互上的應用,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 成 人 色综合 | 高龄熟女50P | 亚洲精品天堂无码中文字幕影院 | 特级淫片大乳女子高清视频 | 精品国产在天天线在线麻豆 | 亚洲欧洲无码AV在线观看你懂的 | 久久婷婷久久一区二区三区 | 中文字幕人妻无码系列第三区 | 259luxu高跟黑色丝袜系列 | 伊人久久综合热青草 | 久久婷婷五月免费综合色啪 | 亚洲精品中文字幕制 | 久久艹伊人 | 久久久久久人精品免费费看 | 欧美日本高清动作片www网站 | 色-情-伦-理一区二区三区 | 伊人久久中文字幕久久cm | 中文字幕亚洲无线码高清不卡 | 欧美特级特黄a大片免费 | 视频一区二区中文字幕 | 中文字幕亚洲乱码熟女在线萌芽 | 国产精品无码AV天天爽人妻蜜桃 | 国产伦精品一区二区三区免费观看 | 少妇无码太爽了视频在线播放 | 99精品视频在线观看 | 99re6久久热在线视频 | 久久综久久美利坚合众国 | 久久影院中文字幕 | 男女久久久国产一区二区三区 | 国产精品高清免费网站 | 国产精品自在拍在线播放 | 亚洲欧美另类无码专区 | 亚洲AV久久久久久久无码 | 亚洲日韩KKK444KKK聚色 | 超碰97视频在线观看 | 东北真实仑乱 | 色欲精品久久人妻AV中文字幕 | 久热这里在线精品 | 久久久无码AV精品亚洲A片软件 | 亚洲国产中文在线视频免费 | 成人网络电视破解版 |