[JS] Tab 메뉴 만들기(forEach, Id)

2024. 8. 11. 23:10·JavaScript
728x90
// 행동강령
$('#tab_area3 .ethic_accordions>li>a').click(function() {
     // 아코디언 메뉴 (변수명 앞 $ 제이쿼리 객체임을 표현)
    let $li = $(this).parent('li');
    // 펄쳐진 아코디언 메뉴
    let isOpen = $li.hasClass('on');

    // 전체 닫기 (title : 펼치기로 변경하여 , 닫힌 상태)
    $('#tab_area3 .ethic_accordions>li').removeClass('on').find('a').attr("title", "펼치기");

    // 닫힌 메뉴
    if (!isOpen) {
        // 선택한 항목 열기
        $li.addClass('on').find('a').attr("title", "접기");

        // 선택한 버튼 위치로 스크롤 이동
        let headerHeight = $('#site-header').outerHeight(); //사이드 헤더 높이
        let targetTop = $li.offset().top; // 요소의 상단 위치

        //  사이트 헤더 바로 아래 위치, 0.5초 동안
        $('html, body').animate({scrollTop: targetTop - headerHeight}, 500);
    }
});

 

 

 

 

 

// 페이지 로드된 후 javascript 코드실행
document.addEventListener("DOMContentLoaded", function() {
     // 탭 메뉴
    var tabs = document.querySelectorAll('.tab_type4 ul li a');
    // 탭 콘텐츠
    var tabContents = document.querySelectorAll('.inr-c2 > div');

    // tabs 배열의 각 요소에  함수를 한 번씩 실행 (foreach 메서드)
    tabs.forEach(function(tab) {
          // 각 탭 버튼에 클릭 이벤트 리스너 추가
          tab.addEventListener('click', function(event) {
               // 클릭이벤트 기본동작 막기(a 태그 새로고침 되지 않도록)
               event.preventDefault();
     
               // 모든 탭의 활성화 클래스 및 title 속성 제거(클릭된 탭을 제외한 다른 탭을 비활성화)
               tabs.forEach(function(t) {
                    t.parentElement.classList.remove('on');
                    t.removeAttribute('title');  // title 속성 제거
          });
          
            // 클릭된 탭에 활성화 클래스 추가 및 title 속성 설정
            tab.parentElement.classList.add('on');
            tab.setAttribute('title', '선택됨');
          
            // 모든 콘텐츠 숨기기
            tabContents.forEach(function(content) {
                content.style.display = 'none';
            });
          
            // 클릭된 탭에 해당하는 콘텐츠 표시(a href = tab_area_ 값)
            var target = tab.getAttribute('href');
            document.querySelector(target).style.display = 'block';
        });
    });

    // 페이지 로드 시 첫 번째 탭에 title 속성 설정
    var activeTab = document.querySelector('.tab_type4 ul li.on a');
    if (activeTab) {
          // 첫 페이지(.on 클래스) 활성화된 파트 a태그에 선택됨 추가
          activeTab.setAttribute('title', '선택됨');
    }
});

 

728x90

'JavaScript' 카테고리의 다른 글

[BCGD] 비전공자 백엔드 개발 도전기 (33)  (1) 2025.03.21
[BCGD] 비전공자 백엔드 개발 도전기 (32)  (0) 2025.03.19
[JS] 숫자 카운터 스크립트  (1) 2024.09.13
[JavaScript] Canvas Totorial(지우개 효과)  (0) 2024.07.23
JavaScript_기초  (0) 2024.06.16
'JavaScript' 카테고리의 다른 글
  • [BCGD] 비전공자 백엔드 개발 도전기 (32)
  • [JS] 숫자 카운터 스크립트
  • [JavaScript] Canvas Totorial(지우개 효과)
  • JavaScript_기초
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    수학
    dp
    알고리즘
    자바
    정처기오답노트
    Level2
    정보처리기사 실기 기출문제
    브루트포스
    구현
    자료구조
    java
    백준
    정처기실기
    시뮬레이션
    solved.ac
    피보나치
    실기
    배열
    정렬
    백엔드개발자
    level1
    문자열
    기출문제
    정처기
    프로그래머스
    정보처리기사
    springboot
    level0
    코딩테스트
    완전탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[JS] Tab 메뉴 만들기(forEach, Id)
상단으로

티스토리툴바