오늘은 vue3에서 아코디언 만들기 일단은 마지막 시간으로 vue의 내장 컴포넌트인 <transition>을 사용해서 아코디언 기능을 만들어보도록 하겠습니다.
특징1
<Transition>이라는 내장 컴포너트를 사용하게 될 경우 Transition 컴포넌트에 기본적으로 내장된 훅을 이할 수 있어요
트렌지션이 적용된 소스를 먼저 보도록 하겠습니다.
<transition
@before-enter="beforeEnter"
@enter="enter"
@before-leave="beforeLeave"
@leave="leave"
>
<div
class="cont"
v-if="item.isOpen"
>
<div v-html="item.content"></div>
</div>
</transition>
위 코드에서 보면 트렌지션 컴포넌트에 @before-enter, @enter, @before-leave, @leave 이벤트 호출이 있는데요 이것이 바로 트렌지션의 내장 훅입니다.
이것들은 아래와 같은 이벤트를 인식합니다.
- @before-enter : 요소가 DOM에 들어가기 직전에 실행됨
- @enter : 트랜지션이 시작될 때 실행됨
- @before-leave : DOM에서 나가기 전에 실행됨
- @leave : 나갈 때 트랜지션 실행 시작
이러한 기본 훅이 제공되기 때문에 이벤트를 적용하기가 매우 편리합니다. 그럼 다음은 위 내장 훅과 함께 거의 셋팅이라고 할 수 있는 함수를 보도록 하겠습니다.
// 트랜지션 함수
function beforeEnter(el) { // DIV cont가 랜더링 되면 높이를 0으로 준비
el.style.height = '0'
}
function enter(el) { // 트렌지션이 시작됨 높이가 컨텐츠 높이만큼 커짐(트렌지션이라 부드럽게 열림)
el.style.height = el.scrollHeight + 'px'
}
function beforeLeave(el) { // 열리는 것과 반대로 닫히기 직전에 높이값을 컨텐츠 높이만큼 지정함
el.style.height = el.scrollHeight + 'px'
}
function leave(el) { // 돔에서 나가기 전에 높이를 0으로 줘서 부드럽게 닫아줌
el.style.height = '0'
}
위와 같이 @before-enter="beforeEnter" 트랜지션 내의 요소(class="cont" DIV)가 화면에 랜더링 되면 beforEnter함수를 호출해서 동작을 실행시켜주는 것입니다. 위에 코드에 주석으로 간단히 설명을 붙여놓았는데요 beforeEnter와 같은 함수명은 편한대로 이름일 지어도 됩니다.
특징2
또한 beforeEnter(el) 함수 호출 시 요소 element 요소를 기본으로 넘겨주기 때문에 함수 부분에서 beforeEnter(el) 이렇게 돔을 받아서 컨트롤 할 수 있습니다. 아주 좋아요!
그렇기 때문에 함수를 호출할 때 자신의 요소를 따로 넘기지 않아도 됩니다.
css의 경우는 앞시간에서 작서한 것과 동일한데요 앞 두 시간에 배웠던 내용보다 트랜지션 내장 컴포넌트를 활용해서 작업하는 것이 훨씬 간편한 부분이라 추가적인 설명이 필요없을 정도입니다.
그럼 완성된 코드를 보겠습니다.
제일 간단하게 기능을 구현할 수 있는 방법이지만 앞 두 시간에 배웠던 것들도 학습을 해두는 것이 더 다양한 기능을 작업할 능력을 기를 수 있을 것입니다.
그럼 뷰에서 아코디언 기능 작업하는 방법은 이쯤에서 마무리하도록 하겠습니다.
감사합니다.😊
'프로그래밍 > vue.js' 카테고리의 다른 글
vue3 아코디언 메뉴 부드럽게 열고 닫기 event.target (0) | 2025.05.10 |
---|---|
vue3 아코디언 메뉴 부드럽게 열고 닫히게 (0) | 2025.05.06 |
vue3 아코디언 메뉴 컨텐츠 만들기(기능 구현) (7) | 2025.04.26 |
vue.js SPA(싱글 페이지 어플리케이션) 이란? (2) | 2025.04.12 |