Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript mouseenter 이벤트로 마우스 진입 시 숨겨진 요소 표시하기

사용자의 마우스가 특정 영역에 들어왔을 때 보이지 않던 요소(예: 액션 바나 메뉴)를 화면에 표시하고 싶은 경우가 있습니다. 이럴 때 JavaScript의 mouseenter 이벤트를 활용하면 간단하게 구현할 수 있습니다.

JavaScript mouseenter 이벤트로 마우스 진입 시 숨겨진 요소 표시하기

구현 방법

1. HTML 마크업

아래 HTML 코드를 선호하는 에디터에 추가하세요. 온라인 에디터를 찾고 있다면 CodePen을 추천합니다.

<div class="invisible-box">Yay you can see me!</div>

2. CSS 스타일링

스타일시트에 다음 CSS 코드를 추가합니다.

.invisible-box {
  opacity: 0;
  transition: all 500ms;
  padding: 32px;
  margin-top: 32px;
  margin-bottom: 32px;
  background-color: #cf4b32;
  color: #fff;
  text-align: center;
}

.opacity-1 {
  opacity: 1;
}

.invisible-box 클래스에는 opacity: 0;이 적용되어 있어 요소가 기본적으로 숨겨져 있습니다. 그 아래에는 JavaScript로 요소를 다시 보이게 할 때 사용할 유틸리티 클래스 .opacity-1이 정의되어 있습니다.

3. JavaScript mouseenter 이벤트

JS 스크립트에 다음 코드를 추가하세요.

let invisibleBox = document.querySelector(".invisible-box")

function addFullOpacity() {
  invisibleBox.classList.add("opacity-1")
}

invisibleBox.addEventListener("mouseenter", addFullOpacity)

JavaScript 코드 작동 원리

  • 먼저 querySelector()를 사용해 .invisible-box 요소를 찾아 알기 쉬운 이름의 변수 invisibleBox에 할당합니다.
  • 그다음 함수 선언(function declaration)으로 addFullOpacity() 함수를 만들고, 함수 본문 {..} 안에 실행할 문(statement)을 작성합니다.
  • 이 문장은 classList 속성의 add() 메서드를 통해 해당 요소에 opacity-1 클래스를 추가합니다.
  • 마지막으로 addEventListener()를 설정하고 두 개의 인수를 전달합니다. 첫 번째 인수는 mouseenter 이벤트를 감지하며, 두 번째 인수는 이벤트가 발생하는 즉시 앞서 만든 addFullOpacity() 함수를 호출합니다.

mouseenter vs mouseover, 무엇이 다를까?

mouseover라는 이벤트 타입도 있다는 점을 눈치챘을 수 있습니다. mouseenter와는 어떻게 다를까요?

핵심적인 차이는 다음과 같습니다.

  • mouseover 이벤트는 부모 요소뿐 아니라 그 자식 요소 위로 마우스가 이동할 때마다 매번 발생합니다. 요소 사이를 계속 왕복하면 이벤트가 반복적으로 트리거되므로 성능 측면에서 비용이 클 수 있습니다.
  • mouseenter 이벤트는 오직 대상 부모 요소에 마우스가 진입할 때 한 번만 발생하며, 자식 요소는 고려하지 않습니다.

따라서 자식 요소마다 서로 다른 동작이 필요한 웹 컴포넌트를 만들 때는 mouseover가 적합합니다. 그 외의 경우에는 성능 면에서 유리한 mouseenter를 사용하는 것이 좋습니다.

참고 자료

  • 전체 코드가 담긴 CodePen 예제
  • MDN Web Docs - mouseenter 문서