js

[j-query] FAQ, Q&A 아코디언 활용해서 만들기 (slideToggle, accordion)

beaksul 2022. 1. 14. 15:43

HTML

<ul class="faq">
	<li class="q">
        <p>Q1</p>
        <img src="images/arrow.png" alt="화살표">
    </li>
    <li class="a">
        <p>A1</p>
    </li>
    <li class="q">
        <p>Q2</p>
        <img src="images/arrow.png" alt="화살표">
    </li>
    <li class="a">
        <p>A2</p>
    </li>
    <li class="q">
        <p>Q3</p>
        <img src="images/arrow.png" alt="화살표">
    </li>
    <li class="a">
        <p>A3</p>
    </li>
</ul>

html 구성은 위처럼 li에 클래스를 줘도 되고 div를 써도 되고 자유롭게 가능하다.

(어차피 제이쿼리에서 next()를 쓸 거라서)

 

CSS

.faq{
	border-top: 1px solid #dbdbdb;
}

.faq .q{
  display: flex;
  justify-content: space-between;
  border-bottom: 1px solid #dbdbdb;
  align-items: center;
  padding: 20px 30px;
  cursor: pointer;
}

.faq .q img{
  width: 20px;
  height: 10px;
}

.faq .q img.rotate{
  transform: rotate(180deg);
}

.faq .a{
  border-bottom: 1px solid #dbdbdb;
  padding: 0 30px;
  background-color: #f8f8f8;
  display: none;
}

.faq .a{
  display: flex;
  padding: 20px 30px;
}

JS

$("document").ready(function(){

  $(".q").click(function(){

    $(".a").slideUp()
    if($(this).next().is(":visible")){
      $(this).next().slideUp()
    } else{
      $(this).next().slideDown()
    }

    let arrow = $(this).children("img")

    $(".q img").not(arrow).removeClass("rotate")
    arrow.toggleClass("rotate")

  })
})