자바스크립트 애니메이션 프레임을 활용한 탭 메뉴 애니메이션 구현하기

탭 메뉴는 웹 사이트에서 많이 사용되는 요소 중 하나입니다. 사용자가 다른 컨텐츠로 전환할 수 있도록 도와주는데요. 이번에는 자바스크립트의 애니메이션 프레임을 이용하여 탭 메뉴의 전환 효과를 구현해보겠습니다.

1. HTML 구조 작성하기

먼저, 탭 메뉴를 구현하기 위한 HTML 구조를 작성해야 합니다. 각 탭은 버튼과 컨텐츠로 구성되어야 합니다. 다음은 예시로 간단한 탭 메뉴를 구현하는 HTML 구조입니다.

<div class="tab-menu">
  <button class="tab-button active" data-tab="tab1">탭1</button>
  <button class="tab-button" data-tab="tab2">탭2</button>
  <button class="tab-button" data-tab="tab3">탭3</button>
</div>

<div class="tab-content" id="tab1">탭1 컨텐츠</div>
<div class="tab-content" id="tab2">탭2 컨텐츠</div>
<div class="tab-content" id="tab3">탭3 컨텐츠</div>

2. CSS 스타일 추가하기

다음으로, 각 탭 메뉴와 컨텐츠를 스타일링하기 위한 CSS를 추가해야 합니다. 예시로 구현한 탭 메뉴는 아래와 같은 스타일을 가지도록 만들었습니다.

.tab-menu {
  display: flex;
}

.tab-button {
  padding: 10px 20px;
  background-color: #ccc;
  border: none;
  cursor: pointer;
}

.tab-button.active {
  background-color: #333;
  color: #fff;
}

.tab-content {
  display: none;
  padding: 20px;
}

.tab-content.active {
  display: block;
}

3. 자바스크립트로 애니메이션 구현하기

이제 자바스크립트를 사용하여 탭 메뉴의 애니메이션을 구현해보겠습니다. 애니메이션 효과를 위해 requestAnimationFrame을 사용할 것입니다.

const tabButtons = document.querySelectorAll('.tab-button');
const tabContents = document.querySelectorAll('.tab-content');

function changeTab(tab) {
  tabButtons.forEach(button => button.classList.remove('active'));
  tabContents.forEach(content => content.classList.remove('active'));

  tab.classList.add('active');
  document.getElementById(tab.dataset.tab).classList.add('active');
}

tabButtons.forEach(button => {
  button.addEventListener('click', () => {
    const currentTab = button;
    changeTab(currentTab);
  });
});

위 자바스크립트 코드는 탭 버튼이 클릭될 때마다 changeTab 함수를 호출하여 현재 선택된 탭을 변경하는 기능을 구현합니다. 이때, 선택된 탭 버튼과 해당 탭 컨텐츠에 active 클래스를 추가하여 활성화 시킵니다.

4. 실행 결과 확인하기

위의 코드를 모두 작성한 뒤, 웹 브라우저에서 실행해서 탭 메뉴 애니메이션을 확인해보세요. 각 탭 버튼을 클릭할 때마다 해당하는 컨텐츠로 전환이 이루어지며, 애니메이션 효과를 통해 부드러운 전환을 경험할 수 있습니다.

이렇게 자바스크립트 애니메이션 프레임을 활용하여 탭 메뉴 애니메이션을 구현할 수 있습니다. 더 복잡한 애니메이션 효과를 원한다면, CSS 애니메이션을 추가하여 보다 다채로운 탭 메뉴를 구현해볼 수도 있습니다.

#hashtags #javascript