UNPKG

user-behavior-analysis

Version:

一个用于追踪和记录用户在网页上各种交互行为的 TypeScript 库

224 lines (223 loc) 6.17 kB
/** * * 这个库用于追踪和记录用户在网页上的各种交互行为,包括: * - 鼠标移动和点击 * - 键盘活动 * - 滚动行为 * - 窗口大小变化 * - 页面可见性变化 * - 表单交互 * - 触摸事件 * - 媒体交互 * - 页面导航 */ /** * 鼠标位置数据类型 [x坐标, y坐标, 时间戳] */ type MousePosition = [number, number, string]; /** * 元素摘要信息 */ interface ElementSummary { /** 标签名 */ tagName: string; /** ID */ id: string; /** 类名 */ className: string; /** name 属性 */ name: string; /** value 属性 */ value: string; /** 文本内容 */ textContent: string; } /** * 点击详情数据类型 [x坐标, y坐标, 元素摘要, 时间戳] */ type ClickDetail = [number, number, ElementSummary, string]; /** * 滚动数据类型 [scrollX, scrollY, 时间戳] */ type ScrollData = [number, number, string]; /** * 窗口尺寸数据类型 [宽度, 高度, 时间戳] */ type WindowSize = [number, number, string]; /** * 可见性变化数据类型 [可见状态, 时间戳] */ type VisibilityChange = [DocumentVisibilityState, string]; /** * 键盘活动数据类型 [按键, 元素摘要, 时间戳] */ type KeyboardActivity = [string, ElementSummary, string]; /** * 导航历史数据类型 [URL, 时间戳] */ type NavigationHistory = [string, string]; /** * 表单交互数据类型 [表单元素摘要, 时间戳] */ type FormInteraction = [ElementSummary, string]; /** * 触摸事件数据类型 [事件类型, x坐标, y坐标, 元素摘要, 时间戳] */ type TouchEventData = [string, number, number, ElementSummary, string]; /** * 媒体交互数据类型 [事件类型, 媒体源, 时间戳] */ type MediaInteraction = [string, string, string]; /** * 用户信息接口 */ interface UserInfo { /** 窗口尺寸 */ windowSize: [number, number]; /** 应用程序代码名称 */ appCodeName: string; /** 应用程序名称 */ appName: string; /** 浏览器供应商 */ vendor: string; /** 操作系统平台 */ platform: string; /** 用户代理字符串 */ userAgent: string; } /** * 时间信息接口 */ interface TimeInfo { /** 开始时间 */ startTime: number | string; /** 当前时间 */ currentTime: number | string; /** 停止时间 */ stopTime: number | string; } /** * 点击信息接口 */ interface ClickInfo { /** 点击次数 */ clickCount: number; /** 点击详情列表 */ clickDetails: ClickDetail[]; } /** * 追踪结果数据接口 */ interface TrackingResults { /** 用户信息 */ userInfo: UserInfo; /** 时间信息 */ time: TimeInfo; /** 点击信息 */ clicks: ClickInfo; /** 鼠标移动轨迹 */ mouseMovements: MousePosition[]; /** 滚动记录 */ mouseScroll: ScrollData[]; /** 键盘活动记录 */ keyboardActivities: KeyboardActivity[]; /** 导航历史 */ navigationHistory: NavigationHistory[]; /** 表单交互记录 */ formInteractions: FormInteraction[]; /** 触摸事件记录 */ touchEvents: TouchEventData[]; /** 媒体交互记录 */ mediaInteractions: MediaInteraction[]; /** 窗口尺寸变化记录 */ windowSizes: WindowSize[]; /** 页面可见性变化记录 */ visibilitychanges: VisibilityChange[]; } /** * 配置选项接口 */ interface UserBehaviourConfig { /** 是否收集用户信息 */ userInfo?: boolean; /** 是否追踪点击事件 */ clicks?: boolean; /** 是否追踪鼠标移动 */ mouseMovement?: boolean; /** 鼠标移动记录间隔(秒) */ mouseMovementInterval?: number; /** 是否追踪鼠标滚动 */ mouseScroll?: boolean; /** 是否启用时间计数 */ timeCount?: boolean; /** 处理后是否清除数据 */ clearAfterProcess?: boolean; /** 数据处理间隔时间(秒) */ processTime?: number; /** 是否追踪窗口大小变化 */ windowResize?: boolean; /** 是否追踪页面可见性变化 */ visibilitychange?: boolean; /** 是否追踪键盘活动 */ keyboardActivity?: boolean; /** 是否追踪页面导航 */ pageNavigation?: boolean; /** 是否追踪表单交互 */ formInteractions?: boolean; /** 是否追踪触摸事件 */ touchEvents?: boolean; /** 是否追踪音视频交互 */ audioVideoInteraction?: boolean; /** 是否启用自定义事件注册 */ customEventRegistration?: boolean; /** 数据处理回调函数 */ processData?: (results: TrackingResults) => void; /** 是否自动发送事件 */ autoSendEvents?: boolean; /** 事件接收后台URL */ sendUrl?: string; } /** * 事件监听器存储接口 */ interface EventListeners { scroll: (() => void) | null; click: ((e: MouseEvent) => void) | null; mouseMovement: ((e: MouseEvent) => void) | null; windowResize: ((e: Event) => void) | null; visibilitychange: ((e: Event) => void) | null; keyboardActivity: ((e: KeyboardEvent) => void) | null; inputActivity: ((e: Event) => void) | null; touchStart: ((e: globalThis.TouchEvent) => void) | null; } /** * 事件处理函数集合接口 */ interface EventFunctions { scroll: () => void; click: (e: MouseEvent) => void; mouseMovement: (e: MouseEvent) => void; windowResize: (e: Event) => void; visibilitychange: (e: Event) => void; keyboardActivity: (e: KeyboardEvent) => void; inputActivity: (e: Event) => void; pageNavigation: () => void; formInteraction: (e: Event) => void; touchStart: (e: globalThis.TouchEvent) => void; mediaInteraction: (e: Event) => void; } /** * 内存管理接口 */ interface MemoryManager { /** 数据处理定时器 */ processInterval: number | null; /** 鼠标移动记录定时器 */ mouseInterval: number | null; /** 当前鼠标位置 */ mousePosition: MousePosition | []; /** 事件监听器引用 */ eventListeners: EventListeners; /** 事件处理函数集合 */ eventsFunctions: EventFunctions; }