탭 메뉴 구현 중 버튼 하이라이트가 사라지지 않는 건

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
탭 메뉴 구현 중 버튼 하이라이트가 사라지지 않는 건

QA

탭 메뉴 구현 중 버튼 하이라이트가 사라지지 않는 건

본문

2949937337_1695109056.2184.png

 

항상 고수님들께 신세 많이 지고있습니다, 감사합니다.

다른게 아니고 탭 메뉴를 강좌를 보며 만들고 있습니다. 위와 같은 모양새이고 검은색 밑줄 들어간게 선택된 상태입니다.

 

2949937337_1695109114.2608.png

 

버튼을 눌러 탭을 넘기면 밑에 탭은 잘 넘어가는데, 탭을 넘겨도 위에 버튼이 하이라이트된게 사라지지가 않습니다 ㅠㅠ ( A탭 선택 상태에서 B탭으로 넘어가도 A탭 버튼에 계속 하이라이트가 들어가는 상태) 이 부분만 고치면 되는데 뭘 건들여야할지 잘 모르겠습니다. 한 번 봐주시면 감사하겠습니다...

 

+ 탭 속 내용물을 누르면 탭 자체가 사라지는 현상이... 나타납니다 이 부분에 대한 해결책이 있을까요?

 

HTML


         <section class="sec sec03">
            <div class="shopping_bn">
                <h3 class="hide-infomation">쇼핑몰</h3>
                <p>All Product</p>
                <div class="inner">
                  <ul class="AP_wr">
                    <li class="tab_list_wr">
                      <ul class="tab_list">
                        <li><button type="button" class="ap_tab is_on" data-list="1">A</button></li>
                        <li><button type="button" class="ap_tab" data-list="2">B</button></li>
                        <li><button type="button" class="ap_tab" data-list="3">C</button></li>
                        <li><button type="button" class="ap_tab" data-list="4">D</button></li>
                        <li><button type="button" class="ap_tab" data-list="5">E</button></li>
                        <li><button type="button" class="ap_tab" data-list="6">F</button></li>
                        <li><button type="button" class="ap_tab" data-list="7">G</button></li>
                      </ul>
                    </li>
                    <li class="AP_tab is_active" data-order="1">
                      <div>
                        내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="2">
                      <div>
                         내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="3">
                      <div>
                         내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="4">
                      <div>
                         내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="5">
                      <div>
                         내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="6">
                      <div>
                         내용
                      </div>
                    </li>
                    <li class="AP_tab" data-order="7">
                      <div>
                         내용
                      </div>
                    </li>
                  </ul>
                </div>
            </div>
          </section>

 

스크립트


      const tab = document.querySelector(".AP_wr");
      const tabListItem = document.querySelectorAll(".tab_list li");
      const tabContent = document.querySelectorAll(".AP_tab");
      const active = document.querySelector(".is_on");
      const showing = document.querySelector(".is_active");
 
      tab.addEventListener("click", (e) => {
        const ListOrder = e.target.dataset.list;
        tabListItem.forEach(function (e) {
          e.classList.remove("is_on");
        });
        e.target.classList.add("is_on");
        tabContent.forEach(function (event) {
          if (event.dataset.order == ListOrder) {
            event.classList.add("is_active");
          } else event.classList.remove("is_active");
        });
      });

 

CSS


section.sec03 .shopping_bn {height: 120vh;}
section.sec03 .shopping_bn > p {margin-bottom: 100px; font-size: 40px;font-weight: 600;text-align: center;}
section.sec03 .shopping_bn .sct_10 li.sct_li {height: 440px;}
 
section.sec03 .AP_wr {position: relative;}
section.sec03 .AP_wr > .tab_list_wr {
    position: absolute;
    top: -65px;
    left: 50%;
    transform: translate(-50%, 0);
}
section.sec03 .AP_wr > .tab_list_wr > ul {display: flex;column-gap: 46px;}
section.sec03 .AP_wr > .tab_list_wr > ul button {background-color: transparent; border: 0; font-size: 16px; color: #222;}
section.sec03 .AP_wr > .tab_list_wr > ul button.is_on::after {content: ""; display: block; margin-top: 10px; width: 100%; height: 2px; background-color: #000;}

 
section.sec03 .AP_wr li > div {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
}
section.sec03 .AP_wr .AP_tab:not(:first-child) {opacity: 0; transition: all 0.5s;}
section.sec03 .AP_wr .is_active {opacity: 1 !important;}

이 질문에 댓글 쓰기 :

답변 2


      const tab = document.querySelector(".AP_wr");
      const tabListItem = document.querySelectorAll(".tab_list li");
      const tabContent = document.querySelectorAll(".AP_tab");
      const active = document.querySelector(".is_on");
      const showing = document.querySelector(".is_active");
 
      tab.addEventListener("click", (e) => {
        const ListOrder = e.target.dataset.list;
        tabListItem.forEach(function (e) {
          // e.classList.remove("is_on");
          e.firstChild.classList.remove("is_on");
        });
        e.target.classList.add("is_on");
        tabContent.forEach(function (event) {
          if (event.dataset.order == ListOrder) {
            event.classList.add("is_active");
          } else event.classList.remove("is_active");
        });
      });


      const tab = document.querySelector(".AP_wr");
      const tabListItem = document.querySelectorAll(".tab_list li");
      const tabContent = document.querySelectorAll(".AP_tab");
      const active = document.querySelector(".is_on");
      const showing = document.querySelector(".is_active");
 
      tab.addEventListener("click", (e) => {
        const ListOrder = e.target.dataset.list;
        if (ListOrder === undefined) {
          return;
        }
        tabListItem.forEach(function (e) {
          // e.classList.remove("is_on");
          e.firstChild.classList.remove("is_on");
        });
        e.target.classList.add("is_on");
        tabContent.forEach(function (event) {
          if (event.dataset.order == ListOrder) {
            event.classList.add("is_active");
          } else event.classList.remove("is_active");
        });
      });

클래스명은 대충 예시로들겠습니다.

li 클릭 > li의 active 클래스 삭제 > 클릭한 li에만 active 클래스 다시부여

요정도로 이해하시고 코드 다시 살펴보시면될거같습니다.

안에 내용이삭제된다는건 remove 들어간 저곳때문인거같은데

removeclass, addclass 이걸로 쓰는게 나을거같은데

답변을 작성하시기 전에 로그인 해주세요.
전체 29
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT