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 相关文章推荐
javascript parseInt 函数分析(转)
Mar 21 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 Javascript
Javascript玩转继承(二)
May 08 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
Apr 07 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
Feb 06 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
three.js欧拉角和四元数的使用方法
Jul 26 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运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
webpack4简单入门实例
2018/09/06 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
django框架使用方法详解
2019/07/18 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
keras.layer.input()用法说明
2020/06/16 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
你所在的项目是如何确定版本号的
2015/12/28 面试题
红领巾心向党演讲稿
2014/09/10 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
岗位聘任协议书
2015/09/21 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers