Add scroll depth tracking
This commit is contained in:
28
static/assets/js/umami-helper.js
Normal file
28
static/assets/js/umami-helper.js
Normal file
@@ -0,0 +1,28 @@
|
||||
// Umami: safe track (no-op if script blocked or not loaded)
|
||||
function umamiTrack(name, data) {
|
||||
if (
|
||||
typeof window.umami !== 'undefined' &&
|
||||
typeof window.umami.track === 'function'
|
||||
) {
|
||||
if (data != null) window.umami.track(name, data);
|
||||
else window.umami.track(name);
|
||||
}
|
||||
}
|
||||
|
||||
// Umami: scroll depth (25%, 50%, 75%, 100%) – once per milestone
|
||||
const scrollMilestones = new Set();
|
||||
function onScroll() {
|
||||
const doc = document.documentElement;
|
||||
const scrollTop = doc.scrollTop || document.body.scrollTop;
|
||||
const scrollHeight =
|
||||
(doc.scrollHeight || document.body.scrollHeight) - window.innerHeight;
|
||||
if (scrollHeight <= 0) return;
|
||||
const pct = Math.round((scrollTop / scrollHeight) * 100);
|
||||
for (const m of [25, 50, 75, 100]) {
|
||||
if (pct >= m && !scrollMilestones.has(m)) {
|
||||
scrollMilestones.add(m);
|
||||
umamiTrack('scroll-depth', { depth: String(m) });
|
||||
}
|
||||
}
|
||||
}
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
Reference in New Issue
Block a user