useOutsidePointerDown
특정 요소 외부에서 마우스 또는 터치 이벤트가 발생할 때 호출되는 콜백을 등록하는 커스텀 훅입니다.
지정된 요소(ref
로 지정된 요소) 외부에서 사용자가 마우스를 클릭하거나, 터치 이벤트가 발생할 때마다 제공된 callback
함수를 호출합니다.
모바일 환경에서는 touchstart
, 데스크탑 환경에서는 mousedown
이벤트를 감지합니다.
Code
Interface
typescript
function useOutsidePointerDown<T extends HTMLElement>(
callback: (targetElement: T) => void,
options?: {
excludeRefs: React.RefObject<HTMLElement>[];
}
): React.RefObject<T>;
Usage
typescript
import { useMemo, useState } from 'react';
import { useOutsidePointerDown } from '@modern-kit/react';
const Example = () => {
const [number, setNumber] = useState(0);
const excludeRef = useRef<HTMLDivElement>(null);
const targetRef = useOutsidePointerDown<HTMLDivElement>(() => {
setNumber(number + 1);
}, {
excludeRefs: [excludeRef], // 외부 클릭 및 터치 감지를 제외할 요소의 ref 배열입니다.
});
const outerBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
const InnerBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
const ExcludeBoxStyle = useMemo(() => {
return { /* ... */ };
}, []);
return (
<div style={outerBoxStyle}>
<h3>Target Box 외부를 클릭해보세요!<br />(Exclude Box는 클릭 감지에 제외됩니다.)</h3>
<p>number: {number}</p>
<div ref={targetRef} style={InnerBoxStyle}>
<h3>Target Box</h3>
</div>
<div ref={excludeRef} style={ExcludeBoxStyle}>
<h3>Exclude Box</h3>
</div>
</div>
);
};