代码之家  ›  专栏  ›  技术社区  ›  squpchaos

让我的手风琴开合的问题

  •  0
  • squpchaos  · 技术社区  · 2 年前

    当我点击图标/按钮时,它应该会打开并显示信息。但是,当我点击它时,什么都不会发生。

    enter image description here 这就是它的正常外观,当你点击它时,它应该会展开。

    enter image description here 这就是单击时的外观。

    <!DOCTYPE html>
    <html>
        <head>
            <script type="text/javascript">
    
                const items = document.querySelectorAll(".accordion button");
    
                function toggleAccordion() {
                    const itemToggle = this.getAttribute('aria-expanded');
      
                    for (i = 0; i < items.length; i++) {
                        items[i].setAttribute('aria-expanded', 'false');
                    }
    
                    if (itemToggle == 'false') {
                        this.setAttribute('aria-expanded', 'true');
                    }
                }
    
                items.forEach(item => item.addEventListener('click', toggleAccordion));
      
            </script>
    
            <title>FAQ</title>
            <link rel="stylesheet" href="style.css">
            <link rel="icon" type="image/x-icon" href="ice_cream.png">
        </head>
        <body>
            <div id="navbar">
                <ul id="ul-nav">
                    <li class="li-nav"><a href="">Home</a></li>
                    <li class="li-nav"><a href="">About</a></li>
                    <li class="li-nav"><a href="">Gallery</a></li>
                    <li class="li-nav"><a href="">Reviews</a></li>
                    <li class="li-nav"><a href="faq.html">FAQ</a></li>
                    <li class="li-nav"><a href="contact.html">Contact</a></li>
                </ul>
            </div>
    
            <div class="container">
                <h2>Frequently Asked Questions</h2>
                <div class="accordion">
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                </div>
            </div>
    
        </body>
    </html>
    
    /* FAQ Page  */
    
    .container {
        box-sizing: border-box;
        margin: 0 auto;
        padding: 4rem;
        width: 48rem;
    }
    
    .accordion {
      .accordion-item {
        border-bottom: 1px solid lightgray;
        button[aria-expanded='true'] {
          border-bottom: 1px solid blue;
        }
      }
      .accordion-item button {
        position: relative;
        display: block;
        text-align: left;
        width: 100%;
        padding: 1em 0;
        color: rgb(66, 61, 61);
        font-size: 1.15rem;
        font-weight: 400;
        border: none;
        background: none;
        outline: none;
        &:hover, &:focus {
          cursor: pointer;
          color: blue;
          &::after {
            cursor: pointer;
            color: blue;
            border: 1px solid blue;
          }
        }
        .accordion-title {
          padding: 1em 1.5em 1em 0;
        }
        .icon {
          display: inline-block;
          position: absolute;
          top: 18px;
          right: 0;
          width: 22px;
          height: 22px;
          border: 1px solid;
          border-radius: 22px;
          &::before {
            display: block;
            position: absolute;
            content: '';
            top: 9px;
            left: 6px;
            width: 10px;
            height: 2px;
            background: currentColor;
          }
          &::after {
            display: block;
            position: absolute;
            content: '';
            top: 5px;
            left: 10.5px;
            width: 2px;
            height: 10px;
            background: currentColor;
          }
        }
      }
      .accordion-item button[aria-expanded='true'] {
        color: rgb(255, 0, 0);
        .icon {
          &::after {
            width: 0;
          }
        }
        + .accordion-content {
          opacity: 1;
          max-height: 9em;
          transition: all 200ms linear;
          will-change: opacity, max-height;
        }
      }
      .accordion-content {
        opacity: 0;
        max-height: 0;
        overflow: hidden;
        transition: opacity 200ms linear, max-height 200ms linear;
        will-change: opacity, max-height;
        p {
          font-size: 1rem;
          font-weight: 300;
          margin: 2em 0;
        }
      }
    }
    

    我可以手动将展开的咏叹调更改为true,它就会更改。不确定我做错了什么。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Patrick Moore    2 年前

    恐怕这可能很简单,只需在HTML之后重新排序JavaScript,或者添加某种DOM侦听器,仅在DOM准备好元素后才启动JavaScript。我不认为它们的存在是为了吸引听众。

    <!DOCTYPE html>
    <html>
        <head>
    
            <title>FAQ</title>
            <link rel="stylesheet" href="style.css">
            <link rel="icon" type="image/x-icon" href="ice_cream.png">
        </head>
        <body>
            <div id="navbar">
                <ul id="ul-nav">
                    <li class="li-nav"><a href="">Home</a></li>
                    <li class="li-nav"><a href="">About</a></li>
                    <li class="li-nav"><a href="">Gallery</a></li>
                    <li class="li-nav"><a href="">Reviews</a></li>
                    <li class="li-nav"><a href="faq.html">FAQ</a></li>
                    <li class="li-nav"><a href="contact.html">Contact</a></li>
                </ul>
            </div>
    
            <div class="container">
                <h2>Frequently Asked Questions</h2>
                <div class="accordion">
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                    <div class="accordion-item">
                        <button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">When are you guys open?</span><span class="icon" aria-hidden="true"></span></button>
                        <div class="accordion-content">
                            <p>We are open every day of the week from 10am to 8pm.</p>
                        </div>
                    </div>
                </div>
            </div>
            <script type="text/javascript">
    
                const items = document.querySelectorAll(".accordion button");
    
                function toggleAccordion() {
                    const itemToggle = this.getAttribute('aria-expanded');
      
                    for (i = 0; i < items.length; i++) {
                        items[i].setAttribute('aria-expanded', 'false');
                    }
    
                    if (itemToggle == 'false') {
                        this.setAttribute('aria-expanded', 'true');
                    }
                }
    
                items.forEach(item => item.addEventListener('click', toggleAccordion));
      
            </script>
    <!-- Reposition to here, at the end --> 
        </body>
    </html>