영원히 흘러가는 강

js 아코디언 본문

html+css+js/JavaScript

js 아코디언

double_R_one_G 2021. 3. 10. 14:22
728x90

QnA에서 많이 사용하는 아코디언!

 

자기 값일때만 해당 글을 보여준다!

 


배운점 : 

           1. 해당 로직!

 

            코드와 함께 보자면

 

<script type="text/javascript">
 		let btncollapse=document.getElementById('btn-collapse'),  //버튼
        	question=document.getElementsByClassName('panel-question'), //각각 감싸는 클래스
 		    heading=document.getElementsByClassName('panel-heading'),  //클릭하게될 제목
 		    answer=document.getElementsByClassName('panel-body');  // 클릭시 나올 정보

 		//제목 클릭시 하는일    
 		for(let i=0;i< heading.length;i++){ 					// 제목을 돌면서
 			heading[i].addEventListener('click',function(e){    //클릭 이벤트를 받아옴
 				for(let j=0;j<question.length;j++){				
 					question[j].classList.remove('active');		//active 삭제하고
 					e.target.parentNode.classList.add('active');	//이벤트 받은 부모에 추가
 					activateBody();
 				}
 			})
 		}
 		function activateBody(){
 			//panel-body 모두 안보이게
 			for(let x=0;x<answer.length;x++){
 				answer[x].style.display = 'NONE' ;
 			}
 			//
 			let activePanel=document.querySelector('.panel-question.active .panel-body');
 			activePanel.style.display = 'block';
 		}
 		activateBody();

    btncollapse.addEventListener('click',function(){
    	for(let y=0;y<answer.length;y++){
    		answer[y].style.display = 'none';
    	}
    })
 	</script>

 

 

변수로는 버튼,글과 제목을 감싸는 클래스, 제목, 글에 대한 btncollapse ,question, heading, answer

 

제목을 클릭을 받으려면 for문으로 heading을 다돌면서 클릭 이벤트를 받으면 

 

안에서 question 클래스에 기존 active 값 삭제하고 target이 된 부모에 active 추가 한다

 

그 외 나머지 for문은 초기에  모두 안보이도록 해주고 밑의 activePanel에서 지목된 active만 display해준다

 

그리고 버튼 클릭시 모든 anwer display=>none

728x90
Comments