user-behavior-analysis
Version:
一个用于追踪和记录用户在网页上各种交互行为的 TypeScript 库
224 lines (223 loc) • 6.17 kB
TypeScript
/**
*
* 这个库用于追踪和记录用户在网页上的各种交互行为,包括:
* - 鼠标移动和点击
* - 键盘活动
* - 滚动行为
* - 窗口大小变化
* - 页面可见性变化
* - 表单交互
* - 触摸事件
* - 媒体交互
* - 页面导航
*/
/**
* 鼠标位置数据类型 [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;
}