@gctrack/behavior 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import "node:module";
2
1
  import { throttle } from "@gctrack/core";
3
2
  //#region src/index.ts
4
3
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Tracker } from '@gctrack/core'\nimport { throttle } from '@gctrack/core'\n\n/**\n * 行为监控插件\n */\nexport class BehaviorMonitor {\n private tracker: Tracker\n private sessionStartTime = Date.now()\n private pageStartTime = Date.now()\n private clickCount = 0\n private scrollDepth = 0\n\n constructor(tracker: Tracker) {\n this.tracker = tracker\n }\n\n /**\n * 启动行为监控\n */\n start(): void {\n if (typeof window === 'undefined') {\n return\n }\n\n this.trackPageView()\n this.trackPageStay()\n this.trackClick()\n this.trackScroll()\n this.trackVisibility()\n this.trackUserEngagement()\n }\n\n /**\n * 追踪页面浏览\n */\n private trackPageView(): void {\n this.tracker.track('page_view', {\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n timestamp: Date.now(),\n })\n }\n\n /**\n * 追踪页面停留时间\n */\n private trackPageStay(): void {\n // 页面卸载时上报停留时间\n const reportStayTime = () => {\n const stayTime = Date.now() - this.pageStartTime\n\n this.tracker.track('page_stay', {\n stayTime,\n clickCount: this.clickCount,\n maxScrollDepth: this.scrollDepth,\n timestamp: Date.now(),\n })\n }\n\n window.addEventListener('beforeunload', reportStayTime)\n\n // 页面隐藏时也上报(移动端)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n reportStayTime()\n }\n else if (document.visibilityState === 'visible') {\n // 页面重新可见时重置计时\n this.pageStartTime = Date.now()\n this.clickCount = 0\n }\n })\n }\n\n /**\n * 追踪点击行为\n */\n private trackClick(): void {\n document.addEventListener(\n 'click',\n (event) => {\n this.clickCount++\n\n const target = event.target as HTMLElement\n const tagName = target.tagName.toLowerCase()\n\n // 获取元素的唯一标识\n const elementId = target.id || ''\n const elementClass = target.className || ''\n const elementText = this.getElementText(target)\n const elementPath = this.getElementPath(target)\n\n // 只上报重要元素的点击\n if (this.isImportantElement(target)) {\n this.tracker.track('click', {\n tagName,\n elementId,\n elementClass,\n elementText,\n elementPath,\n x: event.clientX,\n y: event.clientY,\n timestamp: Date.now(),\n })\n }\n },\n true,\n )\n }\n\n /**\n * 获取元素文本内容\n */\n private getElementText(element: HTMLElement): string {\n const text = element.innerText || element.textContent || ''\n return text.trim().substring(0, 50) // 限制长度\n }\n\n /**\n * 获取元素路径\n */\n private getElementPath(element: HTMLElement): string {\n const path: string[] = []\n let current: HTMLElement | null = element\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase()\n\n if (current.id) {\n selector += `#${current.id}`\n path.unshift(selector)\n break // ID 是唯一的,可以停止\n }\n else if (current.className) {\n const classes = current.className.split(' ').filter(c => c).join('.')\n if (classes) {\n selector += `.${classes}`\n }\n }\n\n path.unshift(selector)\n current = current.parentElement\n\n // 限制路径深度\n if (path.length >= 5)\n break\n }\n\n return path.join(' > ')\n }\n\n /**\n * 判断是否为重要元素\n */\n private isImportantElement(element: HTMLElement): boolean {\n const tagName = element.tagName.toLowerCase()\n const importantTags = ['a', 'button', 'input', 'select', 'textarea']\n\n // 标签类型判断\n if (importantTags.includes(tagName)) {\n return true\n }\n\n // 带有点击事件的元素\n if ((element as any).onclick || element.getAttribute('onclick')) {\n return true\n }\n\n // 带有特定 class 或 data 属性的元素\n if (\n element.hasAttribute('data-track')\n || element.classList.contains('track-click')\n ) {\n return true\n }\n\n return false\n }\n\n /**\n * 追踪滚动深度\n */\n private trackScroll(): void {\n const handleScroll = throttle(() => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop\n const scrollHeight = document.documentElement.scrollHeight\n const clientHeight = window.innerHeight\n\n const scrollPercent = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100)\n\n // 更新最大滚动深度\n if (scrollPercent > this.scrollDepth) {\n this.scrollDepth = scrollPercent\n\n // 每 25% 上报一次\n if (scrollPercent >= 25 && scrollPercent % 25 === 0) {\n this.tracker.track('scroll_depth', {\n depth: scrollPercent,\n timestamp: Date.now(),\n })\n }\n }\n }, 300)\n\n window.addEventListener('scroll', handleScroll)\n }\n\n /**\n * 追踪页面可见性\n */\n private trackVisibility(): void {\n document.addEventListener('visibilitychange', () => {\n this.tracker.track('visibility_change', {\n state: document.visibilityState,\n timestamp: Date.now(),\n })\n })\n }\n\n /**\n * 追踪用户参与度\n */\n private trackUserEngagement(): void {\n let inactiveTimer: ReturnType<typeof setTimeout> | null = null\n\n const resetInactiveTimer = () => {\n if (inactiveTimer) {\n clearTimeout(inactiveTimer)\n }\n\n inactiveTimer = setTimeout(() => {\n this.tracker.track('user_inactive', {\n inactiveDuration: 60000, // 1 分钟\n timestamp: Date.now(),\n })\n }, 60000)\n }\n\n // 监听用户活动\n const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart']\n events.forEach((event) => {\n document.addEventListener(event, resetInactiveTimer, true)\n })\n\n resetInactiveTimer()\n }\n\n /**\n * 追踪表单交互\n */\n trackFormInteraction(formName: string): {\n onFocus: () => void\n onSubmit: (success: boolean, data?: Record<string, any>) => void\n onAbandon: (fieldName: string) => void\n } {\n return {\n // 表单开始填写\n onFocus: () => {\n this.tracker.track('form_start', {\n formName,\n timestamp: Date.now(),\n })\n },\n\n // 表单提交\n onSubmit: (success: boolean, data: Record<string, any> = {}) => {\n this.tracker.track('form_submit', {\n formName,\n success,\n ...data,\n timestamp: Date.now(),\n })\n },\n\n // 表单放弃\n onAbandon: (fieldName: string) => {\n this.tracker.track('form_abandon', {\n formName,\n fieldName,\n timestamp: Date.now(),\n })\n },\n }\n }\n\n /**\n * 追踪搜索行为\n */\n trackSearch(keyword: string, resultCount: number): void {\n this.tracker.track('search', {\n keyword,\n resultCount,\n timestamp: Date.now(),\n })\n }\n\n /**\n * 追踪视频播放\n */\n trackVideo(videoId: string, action: string, data: Record<string, any> = {}): void {\n this.tracker.track('video_action', {\n videoId,\n action, // play, pause, ended, error\n ...data,\n timestamp: Date.now(),\n })\n }\n}\n\n/**\n * 创建行为监控实例\n */\nexport function createBehaviorMonitor(tracker: Tracker): BehaviorMonitor {\n return new BehaviorMonitor(tracker)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Tracker } from '@gctrack/core'\nimport { throttle } from '@gctrack/core'\n\n/**\n * 行为监控插件\n */\nexport class BehaviorMonitor {\n private tracker: Tracker\n private sessionStartTime = Date.now()\n private pageStartTime = Date.now()\n private clickCount = 0\n private scrollDepth = 0\n\n constructor(tracker: Tracker) {\n this.tracker = tracker\n }\n\n /**\n * 启动行为监控\n */\n start(): void {\n if (typeof window === 'undefined') {\n return\n }\n\n this.trackPageView()\n this.trackPageStay()\n this.trackClick()\n this.trackScroll()\n this.trackVisibility()\n this.trackUserEngagement()\n }\n\n /**\n * 追踪页面浏览\n */\n private trackPageView(): void {\n this.tracker.track('page_view', {\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n timestamp: Date.now(),\n })\n }\n\n /**\n * 追踪页面停留时间\n */\n private trackPageStay(): void {\n // 页面卸载时上报停留时间\n const reportStayTime = () => {\n const stayTime = Date.now() - this.pageStartTime\n\n this.tracker.track('page_stay', {\n stayTime,\n clickCount: this.clickCount,\n maxScrollDepth: this.scrollDepth,\n timestamp: Date.now(),\n })\n }\n\n window.addEventListener('beforeunload', reportStayTime)\n\n // 页面隐藏时也上报(移动端)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') {\n reportStayTime()\n }\n else if (document.visibilityState === 'visible') {\n // 页面重新可见时重置计时\n this.pageStartTime = Date.now()\n this.clickCount = 0\n }\n })\n }\n\n /**\n * 追踪点击行为\n */\n private trackClick(): void {\n document.addEventListener(\n 'click',\n (event) => {\n this.clickCount++\n\n const target = event.target as HTMLElement\n const tagName = target.tagName.toLowerCase()\n\n // 获取元素的唯一标识\n const elementId = target.id || ''\n const elementClass = target.className || ''\n const elementText = this.getElementText(target)\n const elementPath = this.getElementPath(target)\n\n // 只上报重要元素的点击\n if (this.isImportantElement(target)) {\n this.tracker.track('click', {\n tagName,\n elementId,\n elementClass,\n elementText,\n elementPath,\n x: event.clientX,\n y: event.clientY,\n timestamp: Date.now(),\n })\n }\n },\n true,\n )\n }\n\n /**\n * 获取元素文本内容\n */\n private getElementText(element: HTMLElement): string {\n const text = element.innerText || element.textContent || ''\n return text.trim().substring(0, 50) // 限制长度\n }\n\n /**\n * 获取元素路径\n */\n private getElementPath(element: HTMLElement): string {\n const path: string[] = []\n let current: HTMLElement | null = element\n\n while (current && current !== document.body) {\n let selector = current.tagName.toLowerCase()\n\n if (current.id) {\n selector += `#${current.id}`\n path.unshift(selector)\n break // ID 是唯一的,可以停止\n }\n else if (current.className) {\n const classes = current.className.split(' ').filter(c => c).join('.')\n if (classes) {\n selector += `.${classes}`\n }\n }\n\n path.unshift(selector)\n current = current.parentElement\n\n // 限制路径深度\n if (path.length >= 5)\n break\n }\n\n return path.join(' > ')\n }\n\n /**\n * 判断是否为重要元素\n */\n private isImportantElement(element: HTMLElement): boolean {\n const tagName = element.tagName.toLowerCase()\n const importantTags = ['a', 'button', 'input', 'select', 'textarea']\n\n // 标签类型判断\n if (importantTags.includes(tagName)) {\n return true\n }\n\n // 带有点击事件的元素\n if ((element as any).onclick || element.getAttribute('onclick')) {\n return true\n }\n\n // 带有特定 class 或 data 属性的元素\n if (\n element.hasAttribute('data-track')\n || element.classList.contains('track-click')\n ) {\n return true\n }\n\n return false\n }\n\n /**\n * 追踪滚动深度\n */\n private trackScroll(): void {\n const handleScroll = throttle(() => {\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop\n const scrollHeight = document.documentElement.scrollHeight\n const clientHeight = window.innerHeight\n\n const scrollPercent = Math.round((scrollTop / (scrollHeight - clientHeight)) * 100)\n\n // 更新最大滚动深度\n if (scrollPercent > this.scrollDepth) {\n this.scrollDepth = scrollPercent\n\n // 每 25% 上报一次\n if (scrollPercent >= 25 && scrollPercent % 25 === 0) {\n this.tracker.track('scroll_depth', {\n depth: scrollPercent,\n timestamp: Date.now(),\n })\n }\n }\n }, 300)\n\n window.addEventListener('scroll', handleScroll)\n }\n\n /**\n * 追踪页面可见性\n */\n private trackVisibility(): void {\n document.addEventListener('visibilitychange', () => {\n this.tracker.track('visibility_change', {\n state: document.visibilityState,\n timestamp: Date.now(),\n })\n })\n }\n\n /**\n * 追踪用户参与度\n */\n private trackUserEngagement(): void {\n let inactiveTimer: ReturnType<typeof setTimeout> | null = null\n\n const resetInactiveTimer = () => {\n if (inactiveTimer) {\n clearTimeout(inactiveTimer)\n }\n\n inactiveTimer = setTimeout(() => {\n this.tracker.track('user_inactive', {\n inactiveDuration: 60000, // 1 分钟\n timestamp: Date.now(),\n })\n }, 60000)\n }\n\n // 监听用户活动\n const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart']\n events.forEach((event) => {\n document.addEventListener(event, resetInactiveTimer, true)\n })\n\n resetInactiveTimer()\n }\n\n /**\n * 追踪表单交互\n */\n trackFormInteraction(formName: string): {\n onFocus: () => void\n onSubmit: (success: boolean, data?: Record<string, any>) => void\n onAbandon: (fieldName: string) => void\n } {\n return {\n // 表单开始填写\n onFocus: () => {\n this.tracker.track('form_start', {\n formName,\n timestamp: Date.now(),\n })\n },\n\n // 表单提交\n onSubmit: (success: boolean, data: Record<string, any> = {}) => {\n this.tracker.track('form_submit', {\n formName,\n success,\n ...data,\n timestamp: Date.now(),\n })\n },\n\n // 表单放弃\n onAbandon: (fieldName: string) => {\n this.tracker.track('form_abandon', {\n formName,\n fieldName,\n timestamp: Date.now(),\n })\n },\n }\n }\n\n /**\n * 追踪搜索行为\n */\n trackSearch(keyword: string, resultCount: number): void {\n this.tracker.track('search', {\n keyword,\n resultCount,\n timestamp: Date.now(),\n })\n }\n\n /**\n * 追踪视频播放\n */\n trackVideo(videoId: string, action: string, data: Record<string, any> = {}): void {\n this.tracker.track('video_action', {\n videoId,\n action, // play, pause, ended, error\n ...data,\n timestamp: Date.now(),\n })\n }\n}\n\n/**\n * 创建行为监控实例\n */\nexport function createBehaviorMonitor(tracker: Tracker): BehaviorMonitor {\n return new BehaviorMonitor(tracker)\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gctrack/behavior",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Behavior monitoring for GCTrack",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -27,7 +27,7 @@
27
27
  "access": "public"
28
28
  },
29
29
  "peerDependencies": {
30
- "@gctrack/core": "0.1.0"
30
+ "@gctrack/core": "0.1.2"
31
31
  },
32
32
  "scripts": {
33
33
  "build": "tsdown",