Xiradorn

Accordion Example

Oct 26th, 2022 (edited)
1,385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 2.61 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8" />
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7.     <title>Document</title>
  8.  
  9.     <style>
  10.         .accordion-header {
  11.             display: flex;
  12.         }
  13.  
  14.         .accordion-btn,
  15.         .accordion-tab {
  16.             padding: 20px;
  17.             border: 1px solid crimson;
  18.         }
  19.  
  20.         .accordion-tab {
  21.             display: none;
  22.         }
  23.  
  24.         .accordion-tab-active {
  25.             display: block;
  26.         }
  27.     </style>
  28. </head>
  29.  
  30. <body>
  31.     <div class="accordion">
  32.         <div class="accordion-header">
  33.             <div class="accordion-btn accordion-btn-active" data-accordion-selector=".accordion-tab-1"
  34.                 data-obj-properties='{"attr1":1,"attr2":3,"attr3":3}'>
  35.                 Tabella 1
  36.             </div>
  37.             <div class="accordion-btn" data-accordion-selector=".accordion-tab-2"
  38.                 data-obj-properties='{"attr1":1,"attr2":4,"attr3":3}'>
  39.                 Tabella 2
  40.             </div>
  41.             <div class="accordion-btn" data-accordion-selector=".accordion-tab-3"
  42.                 data-obj-properties='{"attr1":1,"attr2":2,"attr3":5}'>
  43.                 Tabella 3
  44.             </div>
  45.             <div class="accordion-btn" data-accordion-selector=".accordion-tab-4"
  46.                 data-obj-properties='{"attr1":1,"attr2":6,"attr3":3}'>
  47.                 Tabella 4
  48.             </div>
  49.         </div>
  50.         <div class="accordion-body">
  51.             <div class="accordion-tab accordion-tab-1 accordion-tab-active">
  52.                 Lorem 1
  53.             </div>
  54.             <div class="accordion-tab accordion-tab-2">Lorem 2</div>
  55.             <div class="accordion-tab accordion-tab-3">Lorem 3</div>
  56.             <div class="accordion-tab accordion-tab-4">Lorem 4</div>
  57.         </div>
  58.     </div>
  59.  
  60.     <strong>Current DATA:</strong> <span id="dprop"></span>
  61.  
  62.     <script>
  63.         document.addEventListener("DOMContentLoaded", () => {
  64.             const accordionBtns =
  65.                 document.querySelectorAll(".accordion-btn");
  66.  
  67.             Object.values(accordionBtns).map((btn, idx, ary) => {
  68.                 btn.addEventListener("click", (e) => {
  69.                     e.preventDefault();
  70.  
  71.                     const _this = e.target;
  72.  
  73.                     // Chiudo tutto e resetto tutto
  74.                     Object.values(
  75.                         document.querySelectorAll(".accordion-tab")
  76.                     ).map((tab) => {
  77.                         tab.classList.remove("accordion-tab-active");
  78.                     });
  79.                     ary.map((b) => {
  80.                         b.classList.remove("accordion-btn-active");
  81.                     });
  82.  
  83.                     // attivo la classe corrispondente
  84.                     _this.classList.add("accordion-btn-active");
  85.                     document
  86.                         .querySelector(_this.dataset.accordionSelector)
  87.                         .classList.add("accordion-tab-active");
  88.  
  89.                     document.querySelector("#dprop").innerHTML =
  90.                         _this.dataset.objProperties;
  91.  
  92.                     console.log(
  93.                         "TEST",
  94.                         JSON.parse(_this.dataset.objProperties)
  95.                     );
  96.                 });
  97.             });
  98.         });
  99.     </script>
  100. </body>
  101.  
  102. </html>
Advertisement
Add Comment
Please, Sign In to add comment