JS仿QQ好友列表展开、收缩功能(第二篇)


Posted in Javascript onJuly 07, 2017

在上篇的基础上继续完善,点击一个li元素,其他li元素上的类名清除掉。

效果图如下所示:

JS仿QQ好友列表展开、收缩功能(第二篇)

js:

<script>
 window.onload = function(){ 
 var list = document.getElementById('list'); 
 var ah2 = list.getElementsByTagName('h2'); 
 var uls = list.getElementsByTagName('ul');
 var lis = null;//用于下面的存储
 var arrli = [];//
 // h2要和下面的ul进行匹配,所以我们要用索引值,给h2身上添加索引值
 for(var i=0;i<ah2.length;i++){ 
 ah2[i].index = i;//给h2添加索引值,点击谁就给谁添加索引值
 ah2[i].onclick = function(){
 if(this.className == ''){//判断所点击的h2标签是否有类,
  //this.index指h2身上的索引数,this指h2,h2的索引值为this.index
  uls[this.index].style.display = 'block'; 
  this.className = 'active';//给当前点击的h2添加类,更改箭头方向
 }else{
  uls[this.index].style.display = 'none';
  this.className = '';
 }
 }
 }
 // 找到list里的所有ul,共有三个ul,所以用到for循环
 for(var i=0;i<uls.length;i++){//找到每一组ul
 lis = uls[i].getElementsByTagName('li');//找到uls中的所有li元素,存入到lis中,为什么要存一下呢?因为找到的li元素是一组元素的集合,要给每一个元素添加点击事件,存起来之后要再来一次for循环,for套for中间没有函数包着所以得换一个变量
 for(var j=0;j<lis.length;j++){//找到每组ul中的所有li
 arrli.push(lis[j]); //把每个li放到数组中,因为是要操作一组li中的每个,所以我们把它拎出来放在一起方便操作
 }
 }
 // 找到每个li之后进行点击事件操作
 for(var i=0;i<arrli.length;i++){
 arrli[i].onclick = function(){
 // 清除所有类名,只给当前点击的添加
 // 只保留一个li元素添加类名
 // 为什么用的是i呢?因为for套for它们中间有一层函数隔开(有函数包含的情况下作用域发生了改变),所以可以使用同样的i名称
 for(var i=0;i<arrli.length;i++){
  arrli[i].className = '';//去掉点击所有添加的类
 }
 this.className = 'hover';//给当前点击的li元素添加类名
 }
 }
 }
</script>

注意:

怎么区分for循环中有的用 i 有的用 j?

答:①如果是一个for循环,那么用 i 或者 j 哪个都行,一般是用 i .
②如果是两个for嵌套,那么看两个for中间有没有函数隔开:1.有函数隔开,那么这两个for循环中的变量都可以用 i 。2.没有函数隔开,那么这两个for循环中的变量不能使用相同的 i 来命名,一个 i ,一个 j .

例一:

下面是两个嵌套的for循环中没有函数隔开,所以一个是 i ,一个是 j .

for(var i=0;i<uls.length;i++){//找到每一组ul
 lis = uls[i].getElementsByTagName('li');
 for(var j=0;j<lis.length;j++){//找到每组ul中的所有li
 arrli.push(lis[j]); 
 }
}

例二:

也是两个嵌套的for循环中,有一个函数隔开,那么就可以使用同一个 i 来命名。

for(var i=0;i<arrli.length;i++){
 arrli[i].onclick = function(){ 
 for(var i=0;i<arrli.length;i++){
 arrli[i].className = '';//去掉点击所有添加的类
 }
 this.className = 'hover';//给当前点击的li元素添加类名
 }
}

以上所述是小编给大家介绍的JS仿QQ好友列表展开、收缩功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
js判断文件类型大小并给出提示的实现方法
Jan 03 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
JS使用setInterval实现的简单计时器功能示例
Apr 19 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
详解js创建对象的几种方法及继承
Apr 12 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 17 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 #Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 #Javascript
JS实现搜索关键词的智能提示功能
Jul 07 #Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 #Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 #Javascript
微信小程序之绑定点击事件实例详解
Jul 07 #Javascript
分享19个JavaScript 有用的简写写法
Jul 07 #Javascript
You might like
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
python字典的常用操作方法小结
2016/05/16 Python
详解python实现线程安全的单例模式
2018/03/05 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
python多线程抽象编程模型详解
2019/03/20 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
初入社会应届生求职信
2013/11/18 职场文书
党员干部公开承诺书
2014/03/26 职场文书
委托协议书范本
2014/04/22 职场文书
支部鉴定材料
2014/06/02 职场文书
2015年考研复习计划
2015/01/19 职场文书
幼儿园个人总结
2015/02/28 职场文书
党员进社区活动总结
2015/05/07 职场文书
创业计划书之水果店
2019/07/18 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis