pv.js:首页孕期百宝箱模块露出、点击、百问停留单独报数胎动后台(v26110653)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-07 14:02:52 +00:00
parent d3b8533b98
commit 07d81be6c2
127 changed files with 182 additions and 128 deletions

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110652';
var VER = '26110653';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));

View File

@@ -144,6 +144,59 @@
tdToken().then(function (tok) { tdPost('events', ev, tok); if (leaving) tdPost('events', site, tok); });
}
/* 单独一条数胎动事件(不计入整次停留:和所在页面的时间是重叠的) */
function tdEv(path, title, ms, at) {
if (!TD_ON) return;
var st = tdState(); tdSave(st);
tdToken().then(function (tok) { tdPost('events', { visit_id: st.vid, path: path, title: String(title).slice(0, 40), duration_ms: Math.max(0, Math.round(ms)), entered_at: at || Date.now() }, tok); });
}
/* 11-07 首页「孕期百宝箱」模块单独统计(375797cf 要在数胎动后台「页面统计」里单看百宝箱;标题第一段统一「孕期百宝箱」,后台自动归类):
· 模块露出 50% 以上的累计时长 → 「孕期百宝箱 · 首页模块」,切后台 / 离开首页时报(只看不点的人也算得上)
· 点三个入口 / 「查看更多」/ 下面 6 条 → 「孕期百宝箱 · 点击 · <名称>」,duration 0;点进去的测试列表、计算器、专题页本身照常按页面报
· 从百宝箱打开的孕期百问(首页里的弹层 #detailQA,带 dataset.t0)→ 「孕期百宝箱 · 孕期百问」,停留 = 弹层开着的时长
注:百宝箱里没有「资料 / 兑换」—— 那是「孕N周专属福利」模块(后台 giftEnabled,目前关着),不算百宝箱。 */
function kitTrack() {
var sec = document.getElementById('kitHome'), box = document.getElementById('kit');
if (!sec || !box || !TD_ON) return;
var P = '/mama-box/baibaoxiang', vis = { acc: 0, on: 0, at: 0 }, qa = { on: 0 };
function visFlush() {
if (vis.on) { vis.acc += Date.now() - vis.on; vis.on = 0; }
if (vis.acc >= 500) tdEv(P, '孕期百宝箱 · 首页模块', vis.acc, vis.at);
vis.acc = 0; vis.at = 0;
}
var inView = false;
if (window.IntersectionObserver) {
new IntersectionObserver(function (es) {
es.forEach(function (e) {
inView = e.intersectionRatio >= .5;
if (inView && !vis.on && !document.hidden) { vis.on = Date.now(); vis.at = vis.at || vis.on; }
else if (!inView && vis.on) { vis.acc += Date.now() - vis.on; vis.on = 0; }
});
}, { threshold: [0, .5, 1] }).observe(sec);
}
box.addEventListener('click', function (e) {
var b = e.target.closest('.kit-e,.kit-mb,.kr'); if (!b) return;
var n = b.classList.contains('kr') ? (b.querySelector('.kr-q') || b).textContent
: b.classList.contains('kit-e') ? (b.querySelector('b') || b).textContent : '查看更多 · ' + b.textContent.replace('›', '');
tdEv(P, '孕期百宝箱 · 点击 · ' + String(n).trim(), 0);
}, true);
var qp = document.getElementById('detailQA');
function qaFlush() { if (qa.on) { tdEv(P + '/baiwen', '孕期百宝箱 · 孕期百问', Date.now() - qa.on, qa.on); qa.on = 0; } }
if (qp && window.MutationObserver) {
new MutationObserver(function () {
var open = qp.classList.contains('show');
if (open && !qa.on && qp.dataset.t0 != null) qa.on = Date.now();
else if (!open) qaFlush();
}).observe(qp, { attributes: true, attributeFilter: ['class'] });
}
document.addEventListener('visibilitychange', function () {
if (document.hidden) { visFlush(); qaFlush(); }
else { if (inView) vis.on = vis.at = Date.now(); if (qp && qp.classList.contains('show') && qp.dataset.t0 != null) qa.on = Date.now(); }
});
window.addEventListener('pagehide', function () { visFlush(); qaFlush(); });
}
var cur = null, timer = 0;
function dur() {
if (!cur) return 0;
@@ -200,4 +253,5 @@
open();
if (TD_ON) tdOpen();
if (where().page === 'home') { if (document.getElementById('kit')) kitTrack(); else document.addEventListener('DOMContentLoaded', kitTrack); }
})();