原生 js 写折叠

162 阅读1分钟
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body,div,p,h1,h2,h3,h4,h5,h6,ul,li,dl,dt,a,input,button,textarea,select {
            margin: 0;
            padding: 0;
            outline: none;
        }
        html,body {
            color: #333;
            font-size: 14px;
            min-width: 1200px;
        }
        a {
            text-decoration: none;
        }
        ul li {
            list-style: none;
        }
        .a-list {
            width: 900px;
            margin: 20px auto 20px;
        }
        .a-list li{
            border: 1px solid #ddd;
            margin-bottom: 10px;
        }
        .a-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            background: #f5f5f5;
            padding: 10px 20px;
            box-sizing: border-box;
            cursor: pointer;
        }
        .a-icon {
            font-size: 25px;
            transition: 0.3s transform;
        }
        .a-icon-active {
            transform: rotate(90deg);
        }
        .a-content {
            padding: 10px 20px;
            box-sizing: border-box;
            height: 0;
            opacity: 0;
            transition: all 0.5s linear;
        }
        .a-content-active {
            opacity: 1;
            height: 100px;
        }
    </style>
</head>
<body>
    <ul class="a-list">
        <li class="a-li">
            <div class="a-header">
                <h3>aa</h3>
                <p class="a-icon"></p>
            </div>
            <div class="a-content">
                <p>内容</p>
            </div>
        </li>
        <li class="a-li">
            <div class="a-header">
                <h3>aa</h3>
                <p class="a-icon"></p>
            </div>
            <div class="a-content">
                <p>内容</p>
            </div>
        </li>
        <li class="a-li">
            <div class="a-header">
                <h3>aa</h3>
                <p class="a-icon"></p>
            </div>
            <div class="a-content">
                <p>内容</p>
            </div>
        </li>
        <li class="a-li">
            <div class="a-header">
                <h3>aa</h3>
                <p class="a-icon"></p>
            </div>
            <div class="a-content">
                <p>内容</p>
            </div>
        </li>
        <li class="a-li">
            <div class="a-header">
                <h3>aa</h3>
                <p class="a-icon"></p>
            </div>
            <div class="a-content">
                <p>内容</p>
            </div>
        </li>
    </ul>
    <script>
        const aList = document.querySelectorAll('.a-li')
        aList.forEach((item,i) => {
            let aHeader = item.firstElementChild
            aHeader.addEventListener('click', () => {
                isClass(i)
                aHeader.children[1].classList.toggle('a-icon-active')
                item.children[1].classList.toggle('a-content-active')
            })
        })
        function isClass(i) {
            const aContent = document.querySelectorAll('.a-content')
            const aIcon = document.querySelectorAll('.a-icon')
            aContent.forEach((item, x) => {
                if(i != x) {
                    item.className = 'a-content'
                }
            })
            aIcon.forEach((item, y) => {
                if(i != y) {
                    item.className = 'a-icon'
                }
            })
        }
    </script>
</body>
</html>