js3-5

by wang_siang

HTML

<main>
        <div class="item">
            <button class="question">如何辦理退換貨?
                <span class="symbol">➕</span>
            </button>
            <div class="answer">
                <p>請參考退貨服務頁面。</p>
            </div>
        </div>
        <div class="item">
            <button class="question">退款方式及退款時間?
                <span class="symbol">➕</span>
            </button>
            <div class="answer">
                <p>約7-8個工作天完成退款作業。</p>
            </div>
        </div>
        <div class="item">
            <button class="question">未退回的退款,是否可直接折抵新訂單?
                <span class="symbol">➕</span>
            </button>
            <div class="answer">
                <p>很抱歉,重新訂購時無法直接於新訂單扣抵。</p>
            </div>
        </div>
        <div class="item">
            <button class="question">發票遺失是否仍能辦理退換貨?
                <span class="symbol">➕</span>
            </button>
            <div class="answer">
                <p>很抱歉,需要有發票才能辦理退換貨。</p>
            </div>
        </div>
        <div class="item">
            <button class="question">什麼情況無法辦理退換貨?
                <span class="symbol">➕</span>
            </button>
            <div class="answer">
                <p>超過7天退貨期限,就無法辦理。</p>
            </div>
        </div>

    </main>

CSS

* {
            box-sizing: border-box;
        }

        body {
            margin: 0;
            background-color: #f9f9f9;
            padding: 20px;
        }
        

        main {
            width: 100%;
            max-width: 600px;
            margin: 0 auto;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            padding: 20px;
        }

        .item {
            margin-bottom: 20px;
        }

        .question {
            width: 100%;
            padding: 15px;
            text-align: left;
            color: #ffffff;
            background-color: rgb(33, 33, 33);
            border: 1px solid #ddd;
            border-radius: 5px;
            cursor: pointer;
            font-weight: 600;
            transition: background-color 0.3s;

            display: flex;
            justify-content: space-between;
        }

        .question:hover {
            background-color: rgb(56, 56, 56);
        }

        .answer {
            height: 0;
            display: flex;
            align-items: center;
            padding: 0 15px;
            background-color: #fafafa;
            border-left: 3px solid #ddd;
            overflow: hidden;
            transition: all 0.4s ease-in-out;
        }

        .answer.collapsed {
            height: 100px;
            padding: 15px;
        }

      

        @keyframes rotate {
            0% {
                transform: rotate(0deg);
            }


            100% {
                transform: rotate(360deg);
            }
        }

JavaScript

const answerBtn = document.querySelectorAll('.question');

        answerBtn.forEach((btn) => {
            btn.addEventListener('click', expand)
        })

        function expand(event) {
            let answer = event.target.closest('div').querySelector('.answer');
            let symbol = event.target.closest('div').querySelector('.symbol');
            answer.classList.toggle('collapsed');

           symbol.style.animation='none';
           void symbol.offsetWidth;
           symbol.style.animation='rotate 0.5s ';

            if (answer.classList.contains('collapsed')) {
                symbol.textContent = '➖';
            }
            else {
                symbol.textContent = '➕';
            }
        }