avi-analytics-sdk
Version:
An analytics SDK for capturing user interactions
88 lines (87 loc) • 2.76 kB
JavaScript
import { EventType, ScrollDirection } from "../enums/events";
import { getCssSelector } from "../utils/dom";
let previousScrollPosition = 0;
let mouseMoveThrottle = null;
export function handleClick(event) {
const target = event.target;
return {
event_type: EventType.CLICK,
element_id: target.id || null,
css_selector: getCssSelector(target),
x_position: event.clientX,
y_position: event.clientY,
timestamp: new Date().toISOString(),
metadata: {
text_content: target.textContent || null,
html_content: target.outerHTML || null,
},
};
}
export function handleScroll() {
const scrollPosition = window.scrollY || document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight;
const clientHeight = document.documentElement.clientHeight;
const percentageScrolled = Math.round((scrollPosition / (scrollHeight - clientHeight)) * 100);
const direction = scrollPosition > previousScrollPosition
? ScrollDirection.DOWN
: ScrollDirection.UP;
previousScrollPosition = scrollPosition;
return {
event_type: EventType.SCROLL,
element_id: null,
css_selector: null,
x_position: null,
y_position: null,
timestamp: new Date().toISOString(),
metadata: {
percentageScrolled,
direction,
},
};
}
export function handleMouseMove(event, callback) {
if (mouseMoveThrottle)
return;
mouseMoveThrottle = setTimeout(() => {
const eventData = {
event_type: EventType.MOUSE_MOVE,
element_id: null,
css_selector: null,
x_position: event.clientX,
y_position: event.clientY,
timestamp: new Date().toISOString(),
};
callback(eventData);
mouseMoveThrottle = null;
}, 200);
}
export function capturePageLoad() {
return {
event_type: EventType.DOM_LOAD,
element_id: null,
css_selector: null,
x_position: null,
y_position: null,
timestamp: new Date().toISOString(),
metadata: {
referrer: document.referrer,
user_agent: navigator.userAgent,
viewport_width: window.innerWidth,
viewport_height: window.innerHeight,
},
};
}
export function handlePageUnload() {
return {
event_type: EventType.DOM_UNLOAD,
element_id: null,
css_selector: null,
x_position: null,
y_position: null,
timestamp: new Date().toISOString(),
metadata: {
referrer: document.referrer,
user_agent: navigator.userAgent,
},
};
}