useStayTime

用于统计元素可见时长的 Hook,支持手动控制。

示例

import { useStayTime } from "@lynx-js/react-use";

export function StayTimer() {
  const {
    stayTimeMs,
    isRunning,
    exposureProps,
    pause,
    resume,
    reset,
  } = useStayTime({
    admissionTimeMs: 60,
    onRunningChange: ({ isRunning, stayTimeMs }) => {
      console.log("running?", isRunning, "ms:", stayTimeMs);
    },
  });

  return (
    <view>
      <view {...exposureProps}>
        <text>停留时长: {stayTimeMs}ms</text>
        <text>状态: {isRunning ? "计时中" : "已停止"}</text>
      </view>
      <button bindtap={pause}>暂停</button>
      <button bindtap={resume}>恢复</button>
      <button bindtap={reset}>重置</button>
    </view>
  );
}

类型定义

export interface IUseStayTimeOptions<
  EA extends Record<string, string | number | boolean | undefined>
> extends IUseExposureForNodeOptions<EA> {
  isStaying?: boolean;
  onRunningChange?: (info: { isRunning: boolean; stayTimeMs: number }) => void;
}

export interface IUseStayTimeReturn<
  EA extends Record<string, string | number | boolean | undefined>
> {
  stayTimeMs: number;
  isRunning: boolean;
  exposureProps:
    | {
        binduiappear?: (e: UIAppearanceTargetDetail) => void;
        binduidisappear?: (e: UIAppearanceTargetDetail) => void;
      } & TExposureAttrBag &
        EA;
  pause: () => void;
  resume: () => void;
  reset: () => void;
}