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 相关文章推荐
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
JavaScript门面模式详解
Oct 19 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
Vue隐藏显示、只读实例代码
Jul 18 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
Sep 05 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 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中将汉字转换成拼音的函数代码
2012/09/08 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
发现的以前不知道的函数
2006/09/19 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python正则表达式匹配ip地址实例
2014/10/09 Python
详解K-means算法在Python中的实现
2017/12/05 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
python字典一键多值实例代码分享
2019/06/14 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python3 字符串知识点学习笔记
2020/02/08 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
精彩的大学生自我评价
2013/11/17 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
超市周年庆活动方案
2014/08/16 职场文书
计划生育证明书写要求
2014/09/17 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
组织生活会发言材料
2014/12/15 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript