zoukankan      html  css  js  c++  java
  • QQ菜单案例,点击展开再次点击关闭(类似手风琴效果)

    模仿一下qq的好友展示效果,点击好友标题,下民饿好友列表展示出来,而点击其中的一个好友,给其加上一个点击的效果样式,当然再次点击标题,可以将其关闭。

    说的可能不是很清楚,先来看一下布局,就明白想要的效果了,来看布局代码:

     1 <ul id="list">
     2     <li class="lis">
     3         <h2>我的好友</h2>
     4         <ul>
     5             <li>张三</li>
     6             <li>张三</li>
     7             <li>张三</li>
     8             <li>张三</li>
     9         </ul>
    10     </li>
    11     <li class="lis">
    12         <h2>企业好友</h2>
    13         <ul>
    14             <li>李四</li>
    15             <li>李四</li>
    16             <li>李四</li>
    17             <li>李四</li>
    18             <li>李四</li>
    19         </ul>
    20     </li>
    21     <li class="lis">
    22         <h2>黑名单</h2>
    23         <ul>
    24             <li>张小三</li>
    25             <li>李小四</li>
    26         </ul>
    27     </li>
    28 </ul>

    css样式简单写一下:

     1 <style>
     2         ul , h2 { padding:0; margin:0; }
     3         li { list-style:none; }
     4         #list { width:240px; border:1px solid #e5e5e5; margin:0 auto; }
     5         #list .lis {}
     6         #list h2 { height:30px; line-height:30px; text-indent:20px;font-size:16px; background:url(img/ico1.gif) no-repeat 5px center #6FF; color:#000; }
     7         #list .active { background:url(img/ico2.gif) no-repeat 5px center #FF9; color:#000; }
     8         #list ul { display:none; }
     9         #list ul li { line-height:24px; border-bottom:1px solid #e5e5e5; text-indent:24px; }
    10         #list ul .hover { background:#6FF; }
    11     </style>

    未展开的效果是:

    想要的效果是点击每一个标题可以让其的子列表展开,并且点击 每一个好友给其加上选中样式,如下图:

     

    当然点击任何一个都能展开并且每一个子内容都有选中样式,并且其他的选中样式要清除,好的,来看分析一下js代码:

    1、点击每一组的标题要展开,再次点击要关闭,那么就要首先找到这个标题然后依次去循环,并且判断点击展开再次点击关闭;

    2、要找到每个组下面的子元素,那么同样也要先找到每个子元素然后再去循环每个子元素;

    3、点击某一个子元素要加选中样式,相反点击其他的要清除当前的样式,那么就要用到每次先循环所有并清除所有,然后点击某一个添加。

    大概分为这三个步骤,直接来看js代码:

     1 <script>
     2     window.onload= function(){
     3        var oList=document.getElementById("list");
     4        var oH2=oList.getElementsByTagName("h2");
     5        var oUl=oList.getElementsByTagName("ul");
     6         var arrLi=[];
     7         //找到h2然后循环
     8         for(var i=0;i<oH2.length;i++){
     9             oH2[i].index=i;
    10             oH2[i].onclick=function(){
    11                 //点击展开再次点击关闭的判断
    12                 if(this.className==""){
    13                     oUl[this.index].style.display="block";
    14                     this.className="active";
    15                 }else{
    16                     oUl[this.index].style.display="none";
    17                     this.className="";
    18                 }
    19 
    20             }
    21         }
    22         //这里要找到每个组下面的ul里面的li
    23         for(var i=0;i<oUl.length;i++){
    24             var aLi=oUl[i].getElementsByTagName("li");
    25             for(var j=0;j<aLi.length;j++){
    26                 arrLi.push(aLi[j]) ;//因为要操作的li比较多,那么可以把它push到一个数组里再进行点击操作
    27             }
    28         }
    29        
    30         for(var i=0;i<arrLi.length;i++){ //这里先循环每一个分组里的子元素li
    31             arrLi[i].onclick=function(){ //然后去点击当前子元素li添加选中样式
    32                 //那么就每次进来采用先清空,然后点击哪一个添加哪一个
    33                 for(var i=0;i<arrLi.length;i++){
    34                     arrLi[i].className="";
    35                 }
    36                 this.className="hover";
    37 
    38             }
    39         }
    40     }
    41 </script>

    好了,就是这样了,其实今天的重点还是索引值,要明白什么时候是点击到当前的元素!今天就到这里了,加油!

  • 相关阅读:
    LA 6621 /ZOJ 3736 Pocket Cube 打表+暴力
    UVA 10273
    UVA 10158 并查集的经典应用
    CodeForces 382B 数学推导
    UVA 10806 最小费用最大流
    UVA 10330 最大流
    图论:匹配与覆盖+独立集 团与支配集
    sdut oj 操作系统实验--SSTF磁盘调度算法【操作系统算法】
    【转载】单调队列学习
    poj 3006 Dirichlet's Theorem on Arithmetic Progressions【素数问题】
  • 原文地址:https://www.cnblogs.com/web001/p/7900722.html
Copyright © 2011-2022 走看看