JavaScript 如何构建手风琴菜单

JavaScript 如何构建手风琴菜单

手风琴用于通过添加可折叠效果来渲染、隐藏或切换内容的视图。它有助于以紧凑且视觉上吸引人的方式管理和组织信息。手风琴菜单可以包含嵌套的手风琴,以便以组织和系统化的格式呈现大量内容。在本文中,我们将演示如何使用JavaScript构建动态手风琴。在这里,手风琴将包含一些标题和描述,并具有添加更多项目的功能。最终,手风琴的外观将类似于下面的图像:

JavaScript 如何构建手风琴菜单

先决条件

方法

以下方法将用于创建具有动态功能的手风琴菜单,并将其包括在手风琴中:

  • 创建具有手风琴类的

<

div>,其中包含具有类名和ID的不同输入字段和按钮标签。
* 使用类和元素添加不同的样式属性到手风琴中,以定义填充、边距、文本字体大小、对齐方式、颜色等特定元素。
* 在JavaScript中,声明两个数组,分别包含标题和描述细节,并声明loadItems()方法,使用JavaScript数组.map()方法来呈现数组/列表中的初始项目。
* 定义addItem()方法,用于添加用户通过输入验证的新的自定义主题和其描述。
* 现在,创建createItem()方法,用于声明创建每个组件(无论是自定义还是预定义项),并借助createElement()、classList()和appendChild()方法将其插入到Html DOM中。在这里,用户只需单击各个主题以展开描述部分,并且还可以在手风琴中设置更多自定义主题。

项目结构

JavaScript 如何构建手风琴菜单

示例: 该示例描述了使用JavaScript创建手风琴菜单的基本实现。

JavaScript

// script.js 
  
// Creating list of title and description 
const accordionTitles = [ 
    "What is HTML?", 
    "What is CSS?", 
    "What is JavaScript?", 
]; 
const accordionDesc = [ 
  
    `HTML stands for HyperText Markup Language. 
    It is used to design web pages using a markup language.`, 
  
    `Cascading Style Sheets, fondly referred to as  
    CSS, is a simply designed language intended to 
    simplify the process of making web pages presentable.`, 
  
    `JavaScript is a lightweight, cross-platform, 
    single-threaded, and interpreted compiled 
    programming language which is also known 
    as the scripting language for webpages`, 
]; 
  
// To load items in start 
function loadItem() { 
    accordionTitles.map((e, i) => { 
        createItem(e, accordionDesc[i]); 
    }); 
} 
loadItem(); 
  
// Funcion to add new items 
function addItem() { 
    // Getting value from input 
    const title = document.getElementById("title").value; 
    const des = 
        document.getElementById("description").value; 
  
    // Validating input values 
    if (!title || !des) { 
        window.alert("Incomplete input"); 
    } else { 
        createItem(title, des); 
    } 
} 
  
// Function to show items in accordion 
function createItem(title, desc) { 
  
    // Creating new item in accordion 
    // Creating title component 
    const head = document.createElement("div"); 
    head.classList.add("accordion-header"); 
    head.innerText = title; 
  
    // Creting description component 
    const des = document.createElement("div"); 
    des.classList.add("accordion-content"); 
  
    const p = document.createElement("p"); 
    p.innerText = desc; 
    des.appendChild(p); 
  
    const item = document.createElement("div"); 
    head.classList.add("accordion-item"); 
  
    // To hide or show descripton on click 
    head.addEventListener("click", () => { 
        des.classList.toggle("active"); 
        if (des.style.display === "block") { 
            des.style.display = "none"; 
        } else { 
            des.style.display = "block"; 
        } 
    }); 
  
    // Combine title and desc into new item 
    item.appendChild(head); 
    item.appendChild(des); 
    document.getElementById("menu").appendChild(item); 
}
JavaScript

HTML

<!-- index.html -->
<!DOCTYPE html> 
<html lang="en"> 
  
<head> 
    <title></title> 
    <meta charset="UTF-8" /> 
    <meta name="viewport" 
          content="width=device-width,  
                   initial-scale=1" /> 
    <link href="style.css" 
          rel="stylesheet" /> 
    <script src="script.js"></script> 
</head> 
  
<body> 
    <!-- Card container for project -->
    <div class="card"> 
        
        <!-- Heading or title -->
        <h2>Dynamic Accordion using JavaScript</h2> 
  
        <!-- container for accordion items -->
        <div class="accordion" 
             id="menu"></div> 
  
        <!-- Input for new item -->
        <div class="add"> 
            <h3>Add Custom</h3> 
            <input type="text" 
                   id="title" 
                   placeholder="Title" /> 
            <input type="text" 
                   id="description"
                   placeholder="Description" /> 
            <button type="submit" 
                    onclick="addItem()"> 
                Add Item 
            </button> 
        </div> 
    </div> 
</body> 
  
</html>
HTML

CSS

/* style.css */
  
/* Importing font family */
@import url( 
"https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap"); 
  
/* Styling universal selector */
* { 
    margin: 0; 
    padding: 0; 
    box-sizing: border-box; 
} 
  
/* Style body element */
body { 
    min-height: 50vh; 
    display: flex; 
    align-items: center; 
    text-align: center; 
    justify-content: center; 
    background: hsl(137, 100%, 86%); 
    font-family: "Poppins", sans-serif; 
} 
  
/* Styling card container */
.card { 
    max-width: 33rem; 
    background: #fff; 
    margin: 0 1rem; 
    padding: 1rem; 
    box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); 
    width: 100%; 
    border-radius: 0.5rem; 
} 
  
/* style accordion */
.accordion { 
    margin: 5%; 
    text-align: left; 
} 
  
/* style for accordion items */
.accordion-item { 
    border-bottom: 1px solid #ddd; 
    font-size: larger; 
} 
  
/* Style for accordion head/title */
.accordion-header { 
    background-color: #f5f5f5; 
    padding: 10px; 
    cursor: pointer; 
} 
  
/* Accordion item description */
.accordion-content { 
    padding: 10px; 
    display: none; 
} 
  
/* Input box and button */
.add { 
    padding: auto; 
} 
  
#title { 
    width: 4vw; 
    font-size: larger; 
} 
  
#description { 
    font-size: large; 
    width: 14vw; 
} 
  
button { 
    border-radius: 5px; 
    padding: 5px; 
    font-size: large; 
    color: #dbeefa; 
    background-color: rgb(151, 161, 133); 
}
CSS

输出:

JavaScript 如何构建手风琴菜单

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册