반응형
snowman95
코딩수련장
snowman95
전체 방문자
오늘
어제
  • 분류 전체보기 (229)
    • 앱테크 (3)
    • 옵시디언 (5)
    • 드라마, 영화 (1)
    • 개발자 이야기 (23)
    • 프로젝트 (10)
      • 프로젝트 방법론 (7)
      • 프로젝트 기록 (2)
      • Github (1)
    • 개발 지식 (0)
      • 디자인 패턴 (0)
    • 프론트엔드 개발 (5)
      • 테크트리 (2)
      • React.js (19)
      • ReactNative (2)
      • Next.js (6)
      • GraphQL (6)
      • 패키지 매니저 (2)
      • 라이브러리 (3)
      • 상태관리 라이브러리 (4)
      • Web 지식 (3)
      • HTML CSS (26)
      • Javascript (16)
      • 도구 (Tool) (3)
      • 성능 최적화 (1)
      • 디자인시스템 (0)
    • Python (53)
      • 모음집 (1)
      • 문법 (12)
      • 라이브러리 (15)
      • 알고리즘 (10)
      • 백준 문제풀이 (9)
      • 코딩테스트 (2)
      • 도구 (Tool) (3)
    • C++ (20)
      • 알고리즘 (6)
      • 삼성SW기출 (6)
      • 삼성 A형 (6)
    • 데이터사이언스 (1)
    • 인프라 (9)
      • 하드웨어 지식 (4)
      • Ansible (2)
      • Database (2)
      • 쉘스크립트 (1)
    • 주식 (0)
    • 취업 준비 (4)
      • 취업 이야기 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 언어
  • 알고리즘
  • 티스토리챌린지
  • 전공 요약 #데이터베이스
  • 기계식키보드 #nuphy
  • nextjs
  • 전공 요약 #운영체제
  • 나의 해방일지
  • 전공 요약 #네트워크
  • GraphQL
  • Next.js #graphql #tailwind.css
  • C++
  • 오블완
  • 면접
  • A형
  • 삼성SDS
  • 삼성SW역량테스트
  • 공간복잡도
  • 백준
  • 전공요약

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
snowman95

코딩수련장

리액트에서 마우스가 브라우저 창 밖에 있는지 감지하기
프론트엔드 개발/React.js

리액트에서 마우스가 브라우저 창 밖에 있는지 감지하기

2023. 1. 15. 19:51
728x90
반응형

리액트에서 마우스가 브라우저 창 밖에 있는지 감지하고 싶다면

mouseenter, mouseleave 이벤트를 등록하여 hover 상태롤 확인하는 hook을 추가하면 간단하게 감지할 수 있다.

 

참고로 document.body 의 이벤트로 등록하여, html 의 body를 기준으로 마우스가 enter 인지 leave 인지로 판단해야 하는데

이것을 body가 아니라 현재 컴포넌트를 기준으로도 할 수는 있지만,

현재 컴포넌트가 자주 리렌더링이 되는 컴포넌트라면 예상했던 모습과 많이 다르게 동작할 수 있다.

계속 깜빡깜빡 거리는 식으로 동작할 수 있기 때문에, 어차피 창 전체를 기준으로 동작하는 기능이라면 body를 기준으로 하는게 편하다... 

 

// useHoverWindow.ts

import { useEffect, useState } from 'react'

export const useHoverWindow = (): [boolean] => {
    const [isHover, setIsHover] = useState<boolean>(false)

    const handleMouseOver = () => {
        setIsHover(true)
    }
    const handleMouseOut = () => {
        setIsHover(false)
    }

    useEffect(() => {
        document.body.addEventListener('mouseenter', handleMouseOver)
        document.body.addEventListener('mouseleave', handleMouseOut)
        return () => {
            document.body.removeEventListener('mouseenter', handleMouseOver)
            document.body.removeEventListener('mouseleave', handleMouseOut)
        }
    }, [])
    return [isHover]
}

 

사용시

const [isHover] = useHoverWindow()

if(isHover){
  // 마우스가 브라우저 창 안에 있음
}
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드 개발 > React.js' 카테고리의 다른 글

CRA를 Vite로 마이그레이션 하기  (0) 2023.01.15
리액트에서 외부 링크 관리하기  (0) 2023.01.15
리액트 장치 유형 감지하기  (0) 2023.01.15
React Query onError 가 동작하지 않는 이슈  (0) 2022.12.21
리액트 URL Hash기반의 서브페이지 관리 체계 도입  (0) 2022.09.11
    '프론트엔드 개발/React.js' 카테고리의 다른 글
    • CRA를 Vite로 마이그레이션 하기
    • 리액트에서 외부 링크 관리하기
    • 리액트 장치 유형 감지하기
    • React Query onError 가 동작하지 않는 이슈
    snowman95
    snowman95
    (17~19) Unity/Unreal Engine 게임 프로그래머 (20~21) System Administrator ___________ (22~) React 웹 프론트앤드 개발자 __________ 깃헙 : https://github.com/snowman95

    티스토리툴바