react-visibility-tracking-hooks
Version:
React Hooks for Tracking Element Position in Window Viewport
50 lines (49 loc) • 1.84 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
export interface Offset {
top?: number;
left?: number;
bottom?: number;
right?: number;
}
export interface VisibilityRect {
top: number;
left: number;
bottom: number;
right: number;
}
export interface VisibilityPercent {
verticalPercent: number;
horizontalPercent: number;
overallPercent: number;
}
export interface VisibilityObject {
rect: ClientRect | DOMRect | null;
isVisible: boolean;
percentVisible: VisibilityPercent;
}
export declare type RefCallback = (node: HTMLElement | null) => void;
interface EventListenerInfo {
eventListenerFn: () => void;
getTimeout: () => NodeJS.Timeout | null;
}
interface EventListeners {
scroll?: EventListenerInfo;
resize?: EventListenerInfo;
}
export declare type ObservedEvent = keyof EventListeners;
export interface VisibilityTrackingProps {
onVisibilityChange?: (isVisible: boolean, percentVisible: VisibilityPercent) => any;
partiallyVisible?: boolean | keyof VisibilityRect;
scrollCheck?: boolean;
scrollDelay?: number;
scrollThrottleLimit?: number;
resizeCheck?: boolean;
resizeDelay?: number;
resizeThrottleLimit?: number;
minElementOffset?: Offset;
}
export declare function checkIsVisible(nodeRect: VisibilityRect, containmentRect: VisibilityRect, minElementOffset: Offset, partiallyVisible: boolean | keyof VisibilityRect): boolean;
export declare function computePercentVisible(nodeRect: VisibilityRect, containmentRect: VisibilityRect): VisibilityPercent;
declare function useVisibilityTracking({ onVisibilityChange, partiallyVisible, scrollCheck, scrollThrottleLimit, resizeCheck, resizeThrottleLimit, minElementOffset, }?: VisibilityTrackingProps): [RefCallback, VisibilityObject];
export default useVisibilityTracking;