티스토리 뷰
728x90
반응형
안녕하세요
찐망고 입니다.
오늘은 navi요소에서 많이 쓰는
해당 요소를 클릭했을 때만 클래스를 추가하고
나머지 요소들은 클래스를 제거하는 코드를 볼 건데요..
탭이랑 비슷하죠?
1. 기본코드
const navMenus = document.querySelectorAll(".navi > ul > li");
navMenus.forEach(navMenu => {
navMenu.addEventListener("click", () => {
navMenu.classList.toggle("on");
})
})
일단 위 코드는 클릭한 li요소들에게 on클래스가 추가됩니다.
다시 클릭을 해야 제거되겠죠?
2. 개선된 코드
const navMenus = document.querySelectorAll(".navi > ul > li");
navMenus.forEach(navMenu => {
navMenu.addEventListener("click", () => {
// 모든 li 요소에서 on 클래스를 제거
navMenus.forEach(menu => {
menu.classList.remove("on");
});
// 클릭된 요소에만 on 클래스 추가
navMenu.classList.add("on");
});
});
전체 li요소의 on클래스를 제거하고 클릭된 요소에만 on클래스를 추가하면 되겠죠?
3. 이벤트 위임을 사용한 코드 개선
const navMenuContainer = document.querySelector(".navi-menu > ul");
navMenuContainer.addEventListener("click", (event) => {
const target = event.target.closest("li");
if (target && navMenuContainer.contains(target)) {
// 모든 li 요소에서 on 클래스를 제거
const navMenus = navMenuContainer.querySelectorAll("li");
navMenus.forEach(menu => {
menu.classList.remove("on");
});
// 클릭된 요소에만 on 클래스 추가
target.classList.add("on");
}
});
이벤트 위임을 사용하여 코드를 개선할 수도 있는데요.
위 코드를 비교해 보면
성능:
- 개별 이벤트 리스너: 각 li 요소마다 이벤트 리스너를 추가하고, 클릭할 때마다 모든 li 요소를 순회하여 on 클래스를 제거합니다.
- 이벤트 위임: 단 하나의 이벤트 리스너가 추가되며, 클릭된 요소만 처리합니다. 많은 수의 li 요소가 있을 때 성능이 더 우수합니다.
코드 간결성:
- 개별 이벤트 리스너: 코드가 간결하고 이해하기 쉽습니다.
- 이벤트 위임: 코드가 조금 더 복잡해질 수 있으나, 큰 프로젝트에서 유지보수가 용이합니다.
유지보수성 및 확장성:
- 개별 이벤트 리스너: 동적으로 추가되는 요소에 대해서는 별도로 이벤트 리스너를 추가해야 합니다.
- 이벤트 위임: 동적으로 추가되는 요소들도 자동으로 처리됩니다.
이벤트 위임 방법이
많은 li 요소를 다루거나, 동적으로 요소가 추가될 가능성이 있는 경우 더 효율적이고 유지보수에 유리합니다.
초보자 입장에선 코드를 이해하는 것이 주목적이니까 개별 이벤트 리스너 방식을 사용해도 괜찮습니다.
728x90
반응형
'WEB > JS코드' 카테고리의 다른 글
자바스크립트 부드러운 top버튼 스크롤 이벤트 (2) | 2024.03.25 |
---|---|
자바스크립트 top 버튼 애니메이션 - requestAnimationFrame() (0) | 2024.03.21 |
자바스크립트 tab만들기 (0) | 2024.03.19 |
css와 js를 이용한 자동 롤링 슬라이드 배너 (2) | 2024.03.05 |
jQuery.marquee 텍스트 자동 롤링 (0) | 2024.03.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 디자인팁
- 코딩교육
- uidesign
- margin
- uiux
- 반응형웹
- css
- JavaScriptTips
- CSS3
- 프로그래밍기초
- JavaScript
- boxmodel
- 웹디자인
- 웹접근성
- css4
- css그리드
- Slick
- 자바스크립트숫자카운트
- padding
- UI디자인
- 시멘틱마크업
- 크로스브라우징
- 피그마플러그인
- 스마트폰해상도
- Border
- 웹표준
- slickAPI
- uxdesign
- 슬라이드플러그인
- 포토샵합성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함