js+css在交互上的应用


Posted in Javascript onJuly 18, 2010

但灵活应用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>

效果如下:
js+css在交互上的应用
需要的效果是:

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 相关文章推荐
ExtJS 2.0 实用简明教程之布局概述
Apr 29 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
May 18 Javascript
JavaScript toUpperCase()方法使用详解
Aug 26 Javascript
详解vue.js全局组件和局部组件
Apr 10 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
JavaScript中的回调函数实例讲解
Jan 27 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
微信小程序手动添加收货地址省市区联动
May 18 Javascript
JS实现炫酷雪花飘落效果
Aug 19 Javascript
基于jQuery试卷自动排版系统
Jul 18 #Javascript
Date对象格式化函数代码
Jul 17 #Javascript
js下利用控制器载入对应脚本
Jul 17 #Javascript
js 纯数字不重复排列的另类方法
Jul 17 #Javascript
jQuery Autocomplete自动完成插件
Jul 17 #Javascript
一个js拖拽的效果类和dom-drag.js浅析
Jul 17 #Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 #Javascript
You might like
解析PHP提交后跳转
2013/06/23 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
javascript实现微信分享
2014/12/23 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
Python入门篇之字符串
2014/10/17 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python networkx包的实现
2020/02/14 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
简单的命令查看安装的python版本号
2020/08/28 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
财务管理专业推荐信
2013/11/19 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
商务会议邀请函
2014/01/09 职场文书
宿舍违规检讨书
2014/01/12 职场文书
篮球赛口号
2014/06/18 职场文书
实习协议书范本
2014/09/25 职场文书
实施意见格式范本
2015/06/05 职场文书
团结主题班会
2015/08/13 职场文书
业余无线电通联Q语
2022/02/18 无线电