JavaScript e.target 이벤트
이 폴더는 DOM 조작과 이벤트 처리 연습을 모은 장입니다. 작은 예제가 많기 때문에 코드가 어느 요소를 찾고, 어떤 이벤트에서 어떤 스타일이나 값을 바꾸는지 구분하는 것이 핵심입니다.
e.target은 이벤트가 실제로 발생한 요소입니다. window에 이벤트를 걸어도, 사용자가 마우스를 올린 실제 span이나 클릭한 li를 target으로 확인할 수 있습니다.
target 예제는 마우스가 올라간 요소의 tagName을 소문자로 바꾼 뒤 span인지 검사합니다. span이 아니면 return으로 종료합니다.
| 코드 | 의미 | 처리 |
|---|---|---|
| e.target | 실제 대상 요소 | span 또는 다른 요소 |
| tagName | 태그 이름 | SPAN처럼 대문자 가능 |
| toLowerCase | 소문자 변환 | span 비교 |
| return | 함수 종료 | span이 아니면 무시 |
target2 예제는 li를 클릭하면 해당 항목만 1.3배로 키우고, 이전에 선택한 li는 다시 1em으로 되돌립니다. 이를 위해 이전 요소를 prev 변수에 저장합니다.
onmouseover/onmouseout 예제는 li에 이벤트 리스너를 붙이고, 마우스를 올리면 설명 div를 좌표 위치에 표시합니다.
원본은 l0, l1, l2, l3 id를 switch 문으로 숫자 n에 연결합니다. 주석처럼 문자열에서 숫자를 뽑으면 더 짧게 만들 수도 있습니다.
| id | n | 설명 배열 |
|---|---|---|
| l0 | 0 | text[0] |
| l1 | 1 | text[1] |
| l2 | 2 | text[2] |
| l3 | 3 | text[3] |
visibility 예제는 숨겨진 span 단어들을 버튼으로 보이게 하거나 다시 숨깁니다. getComputedStyle로 현재 계산된 visibility 값을 읽는 점이 중요합니다.
| 속성 | 의미 | 비교 |
|---|---|---|
| visibility:hidden | 안 보이지만 공간은 유지 | display:none과 다름 |
| visibility:visible | 다시 보임 | 공간 변화 없음 |
| getComputedStyle | 실제 적용 스타일 읽기 | CSS 파일 값 포함 |
| style.visibility | 인라인 스타일 변경 | JS로 토글 |
onwheel 예제는 이미지 위에서 마우스 휠을 굴리면 width와 height를 5%씩 줄이거나 늘립니다. 원본은 wheelDelta가 양수이면 축소, 아니면 확대합니다.
| 휠 방향 | 조건 | 처리 |
|---|---|---|
| 위쪽 | wheelDelta > 0 | 너비/높이 5% 감소 |
| 아래쪽 | 그 외 | 너비/높이 5% 증가 |
| this | 현재 img | 크기 변경 대상 |
| event | 휠 이벤트 | 방향 확인 |
예제에는 HTML 속성 이벤트, window 이벤트 대입, addEventListener가 섞여 있습니다. 모두 동작하지만 실무에서는 addEventListener가 확장에 유리합니다.
| 실수 | 증상 | 해결 |
|---|---|---|
| tagName 대소문자 무시 | 비교가 실패합니다. | toLowerCase를 사용합니다. |
| prev 저장 누락 | 여러 li가 계속 커집니다. | 이전 요소를 저장해 되돌립니다. |
| commentDiv 위치 단위 누락 | 설명 박스가 이동하지 않습니다. | px를 붙입니다. |
| visibility와 display 혼동 | 공간이 남는 이유를 모릅니다. | visibility는 공간을 유지합니다. |
| wheelDelta만 과신 | 브라우저별 차이가 생깁니다. | deltaY도 함께 고려할 수 있습니다. |
| 체크 | 통과 기준 |
|---|---|
| e.target | 이벤트 실제 대상 요소를 설명합니다. |
| tagName | 태그 이름 비교와 소문자 변환을 압니다. |
| prev | 이전 선택 요소를 되돌리는 이유를 압니다. |
| mouseover | 설명 박스를 좌표 위치에 띄우는 흐름을 설명합니다. |
| visibility | 숨김/보임 토글과 공간 유지 특성을 압니다. |
| wheel | 휠 방향에 따라 이미지 크기를 바꿀 수 있습니다. |
| 확인 | 콘솔 예시 | 의미 |
|---|---|---|
| target | console.log(e.target) | 실제 이벤트 대상을 봅니다. |
| tagName | console.log(e.target.tagName) | 태그 이름 형식을 확인합니다. |
| 좌표 | console.log(e.clientX, e.clientY) | 설명 div 위치 기준을 확인합니다. |
| visibility | console.log(v) | 현재 표시 상태를 봅니다. |
| 휠값 | console.log(e.wheelDelta) | 방향 값을 확인합니다. |
| 케이스 | 동작 | 예상 결과 |
|---|---|---|
| span hover | span에 마우스 올림 | 밑줄 표시 |
| p hover | p에 마우스 올림 | 변화 없음 |
| li 클릭 | 두 항목 순서대로 클릭 | 현재 항목만 확대 |
| li hover | 목록에 마우스 올림 | 설명 박스 표시 |
| show/hide | 버튼 반복 클릭 | 숨은 단어 토글 |
| wheel | 이미지 위 휠 | 크기 확대/축소 |
target 예제는 window에 이벤트를 걸고 실제 대상이 span인지 li인지 검사합니다. 이런 방식은 부모나 상위 객체에서 이벤트를 받고 target으로 하위 요소를 구분하는 이벤트 위임의 기본 형태입니다.
| 방식 | 장점 | 주의 |
|---|---|---|
| 각 요소에 직접 등록 | 대상이 명확합니다. | 요소가 많으면 등록 코드가 늘어납니다. |
| 상위 요소에 등록 | 동적 요소에도 대응하기 쉽습니다. | target 필터가 필요합니다. |
| window에 등록 | 문서 전체를 관찰합니다. | 불필요한 이벤트까지 받습니다. |
| addEventListener | 여러 리스너를 둘 수 있습니다. | 제거하려면 같은 함수 참조가 필요합니다. |
마우스 휠이나 이벤트 객체 속성은 브라우저에 따라 차이가 있을 수 있습니다. 원본 예제는 학습용으로 단순하지만, 실제 코드에서는 표준 속성을 함께 고려합니다.
| 항목 | 원본 | 개선 방향 |
|---|---|---|
| 휠 방향 | wheelDelta | deltaY도 고려 |
| 이벤트 연결 | HTML 속성, window 대입 | addEventListener로 통일 |
| 대상 검사 | tagName 비교 | matches("span") 활용 가능 |
| 설명 위치 | clientX/clientY | 스크롤 문서면 pageX/pageY 검토 |
| 크기 제한 | 제한 없음 | 최소/최대 width 설정 |
| 연습 | 목표 |
|---|---|
| ul에만 이벤트 등록 | window 대신 목록 영역에서만 target을 검사합니다. |
| class로 필터링 | tagName 대신 className이나 matches를 써 봅니다. |
| 설명 박스 크기 변경 | 텍스트 길이에 맞춰 width와 height를 조정합니다. |
| 이미지 최소 크기 | wheel 축소가 너무 작아지지 않게 제한합니다. |
| 숨김 방식 비교 | visibility와 display none 차이를 직접 확인합니다. |
| 이전 선택 표시 | prev 항목에 배경색을 주고 되돌려 봅니다. |
| mouseout 확인 | 마우스가 빠질 때 설명 박스가 숨는지 봅니다. |
| 좌표 보정 | 설명 박스가 커서에 가리지 않게 위치를 조정합니다. |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| JavaScript transform · z-index · 난수 완전 정리 (0) | 2026.07.06 |
|---|---|
| JavaScript DOM 동적 삽입 완전 정리 (0) | 2026.07.06 |
| JavaScript 계산기 · DOM 실습 완전 정리 (0) | 2026.07.06 |
| JavaScript 타이머 산수 · Enter 계산기 완전 정리 (0) | 2026.07.06 |
| JavaScript onmousemove · onblur · radio 이미지 완전 정리 (0) | 2026.07.06 |
왕진 블로그

댓글