테스트 사이트 - 개발 중인 베타 버전입니다

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

ZDZ 2년 전 조회 1,950

 

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

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

 

 

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

 

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

 

HTML

</p>

<p>         <section class="sec sec03"></p>

<p>            <div class="shopping_bn"></p>

<p>                <h3 class="hide-infomation">쇼핑몰</h3></p>

<p>                <p>All Product</p></p>

<p>                <div class="inner"></p>

<p>                  <ul class="AP_wr"></p>

<p>                    <li class="tab_list_wr"></p>

<p>                      <ul class="tab_list"></p>

<p>                        <li><button type="button" class="ap_tab is_on" data-list="1">A</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="2">B</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="3">C</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="4">D</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="5">E</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="6">F</button></li></p>

<p>                        <li><button type="button" class="ap_tab" data-list="7">G</button></li></p>

<p>                      </ul></p>

<p>                    </li></p>

<p>                    <li class="AP_tab is_active" data-order="1"></p>

<p>                      <div></p>

<p>                        내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="2"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="3"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="4"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="5"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="6"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                    <li class="AP_tab" data-order="7"></p>

<p>                      <div></p>

<p>                         내용</p>

<p>                      </div></p>

<p>                    </li></p>

<p>                  </ul></p>

<p>                </div></p>

<p>            </div></p>

<p>          </section></p>

<p>

 

스크립트

</p>

<p>      const tab = document.querySelector(".AP_wr");</p>

<p>      const tabListItem = document.querySelectorAll(".tab_list li");</p>

<p>      const tabContent = document.querySelectorAll(".AP_tab");</p>

<p>      const active = document.querySelector(".is_on");</p>

<p>      const showing = document.querySelector(".is_active");</p>

<p> </p>

<p>      tab.addEventListener("click", (e) => {</p>

<p>        const ListOrder = e.target.dataset.list;</p>

<p>        tabListItem.forEach(function (e) {</p>

<p>          e.classList.remove("is_on");</p>

<p>        });</p>

<p>        e.target.classList.add("is_on");</p>

<p>        tabContent.forEach(function (event) {</p>

<p>          if (event.dataset.order == ListOrder) {</p>

<p>            event.classList.add("is_active");</p>

<p>          } else event.classList.remove("is_active");</p>

<p>        });</p>

<p>      });</p>

<p>

 

CSS

</p>

<p>section.sec03 .shopping_bn {height: 120vh;}</p>

<p>section.sec03 .shopping_bn > p {margin-bottom: 100px; font-size: 40px;font-weight: 600;text-align: center;}</p>

<p>section.sec03 .shopping_bn .sct_10 li.sct_li {height: 440px;}</p>

<p> </p>

<p>section.sec03 .AP_wr {position: relative;}</p>

<p>section.sec03 .AP_wr > .tab_list_wr {</p>

<p>    position: absolute;</p>

<p>    top: -65px;</p>

<p>    left: 50%;</p>

<p>    transform: translate(-50%, 0);</p>

<p>}</p>

<p>section.sec03 .AP_wr > .tab_list_wr > ul {display: flex;column-gap: 46px;}</p>

<p>section.sec03 .AP_wr > .tab_list_wr > ul button {background-color: transparent; border: 0; font-size: 16px; color: #222;}</p>

<p>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;}</p>

<p>

 </p>

<p>section.sec03 .AP_wr li > div {</p>

<p>  position: absolute;</p>

<p>  top: 0;</p>

<p>  left: 0;</p>

<p>  width: 100%;</p>

<p>}</p>

<p>section.sec03 .AP_wr .AP_tab:not(:first-child) {opacity: 0; transition: all 0.5s;}</p>

<p>section.sec03 .AP_wr .is_active {opacity: 1 !important;}</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
2년 전

</p>

<p>      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");

        });

      });</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

Z
ZDZ
2년 전
아 이제 정상작동이 되네요 감사합니다 ㅠㅠ 혹시 탭 안의 항목을 누르면 탭이 사라지는 것에 대해서는 해결방법이 있을까요?
배르만
2년 전
[code]
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");
});
});
[/code]
Z
ZDZ
2년 전
정말 감사합니다!!!!!!!! ㅠㅠㅠㅠㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

cuwaaang
2년 전

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

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

Z
ZDZ
2년 전
removeClass와 addClass로 바꾸니 이상하게 작동을 안하더라구요..ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인