UNPKG

@yqg/multiple-click

Version:

Monitor user's multiple click behavior and report

75 lines (74 loc) 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackingHandlerFactory = void 0; const trackingHandlerFactory = ({ interval, continuousCount, range, uploadTrackingInfo, filter, excludeRules, }) => { const triggerQueue = []; const appendTriggerItem = (item) => { triggerQueue.push(item); let delIndex = -1; for (let i = 0, len = triggerQueue.length - 1; i < len; i++) { const { timeStamp: t1 } = triggerQueue[i]; const { timeStamp: t2 } = triggerQueue[i + 1]; if (t2 - t1 > interval) { delIndex = i; } } triggerQueue.splice(0, delIndex + 1); for (let i = 0, len = triggerQueue.length; i < len; i++) { if (triggerQueue.length < continuousCount) { return; } for (let j = i + 1; j < triggerQueue.length; j++) { const { pageX: x1, pageY: y1 } = triggerQueue[i]; const { pageX: x2, pageY: y2 } = triggerQueue[j]; if (Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2)) <= range * 2) { continue; } const delItem = triggerQueue.shift(); if (delItem === triggerQueue[i]) { break; } } } }; const trackingHandler = (event) => { try { const { target, timeStamp, pageX, pageY } = event; if (!target || !(target instanceof Element) || target === document.body || filter(event)) { return; } if (excludeRules.length) { const pathname = new URL(location.href).pathname; const isMatch = !!excludeRules.find(({ selector, shallow, page }) => { if (page.length && page.indexOf(pathname) === -1) { return false; } return shallow ? target.matches(selector) : target.closest(selector); }); if (isMatch) { return; } } const triggerItem = { timeStamp, target, pageX, pageY, }; appendTriggerItem(triggerItem); if (triggerQueue.length >= continuousCount) { const elementText = (target === null || target === void 0 ? void 0 : target.innerText) || (target === null || target === void 0 ? void 0 : target.value); const isSelectionReport = elementText && window.getSelection().toString().includes(elementText); if (!isSelectionReport) { uploadTrackingInfo(event); } triggerQueue.length = 0; } } catch (error) { console.error('多次点击上报监听器异常:', error); } }; return trackingHandler; }; exports.trackingHandlerFactory = trackingHandlerFactory;