源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

[JavaScript] js+css在交互上的应用

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2010-7-18 23:42:56 | 显示全部楼层 |阅读模式
关于css应用。以前一直认为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.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优先级》。
回复

使用道具 举报

9

主题

2万

回帖

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2022-8-20 13:12:33 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

425

积分

中级会员

Rank: 3Rank: 3

积分
425
发表于 2022-11-24 23:17:12 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2023-2-26 09:40:20 | 显示全部楼层
非常vbcbvcvbvcb
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

182

积分

注册会员

Rank: 2

积分
182
发表于 2023-3-8 13:37:31 | 显示全部楼层
看看看看看看看看看看看看看看看看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

85

积分

注册会员

Rank: 2

积分
85
发表于 2023-6-27 07:27:51 | 显示全部楼层
管灌灌灌灌灌灌灌灌灌灌
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-10-15 21:18:34 | 显示全部楼层
vcxvcxv
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

67

积分

注册会员

Rank: 2

积分
67
发表于 2023-11-20 05:18:13 | 显示全部楼层
哦哦哦ijhhsdj
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2023-11-25 09:25:41 | 显示全部楼层
好人好人好人好人
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2023-12-4 08:06:23 | 显示全部楼层
看看怎么样再说
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-1 15:54 , Processed in 0.065218 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表