最近开个新项目。要使用折叠面板,由于需求比较扯,控件的样式又不便于自定义。

废话不说,先写了个demo,上代码。

1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6     <style>
 7         .item_wrap{
 8             display: none;
 9         }
10     </style>
11 </head>
12 <body>
13     <ul>
14         <li>
15             <div class="item">item1</div>
16             <div class="item_wrap">item1item1item1item1item1item1</div>
17         </li>
18         <li>
19             <div class="item">item2</div>
20             <div class="item_wrap">item2item2item2item2item2item2</div>
21         </li>
22     </ul>
23     <script>
24         let items=document.querySelectorAll('.item'),itemWraps=document.querySelectorAll('.item_wrap');
25         items.forEach((ele,index)=>{
26             ele.dispBol='false';    //创建一个属性来记录当前面板是否展开   true 展开 false折叠 
27             items[index].onclick=((e)=>{
28                 let thisDispBol=e.toElement.dispBol; //先保存thisDisBol。接下来要重置
29                 itemsInit();
30                 thisDispBol=='false' ? e.toElement.dispBol='true' : e.toElement.dispBol='false';
31                 repaint();
32             });
33         })
34         function repaint(){
35             items.forEach((ele,index)=>{
36                 ele.dispBol=='true' ? itemWraps[index].style.display='block' : itemWraps[index].style.display='none';
37             })
38         }
39         function itemsInit(){
40             items.forEach((ele,index)=>{
41                 ele.dispBol='false';
42             })
43         }
44     </script>
45 </body>
46 </html>