// helpTip.js - 全局tooltip功能,可在不同页面复用 // 在页面里复用一个全局 tooltip 节点 let __globalTooltip; // 确保tooltip节点存在 function ensureTooltip() { if (!__globalTooltip) { __globalTooltip = document.createElement('div'); __globalTooltip.className = 'tooltip-portal'; document.body.appendChild(__globalTooltip); } return __globalTooltip; } // 绑定到任意图标:移入→显示;移动→跟随;移出→隐藏 function attachImmediateTooltip(anchorEl, text) { const tip = ensureTooltip(); let shown = false; function show(e) { tip.textContent = text; tip.style.display = 'block'; tip.style.opacity = '1'; position(e); shown = true; } function position(e) { // 以鼠标位置为准 const padding = 8; const tipRect = tip.getBoundingClientRect(); let x = e.clientX + 12; let y = e.clientY - tipRect.height - 12; // 简易防出界 const vw = window.innerWidth, vh = window.innerHeight; if (x + tipRect.width + padding > vw) x = vw - tipRect.width - padding; if (y < padding) y = e.clientY + 16; // 放到下面 tip.style.left = `${x}px`; tip.style.top = `${y}px`; } function hide() { tip.style.opacity = '0'; // 用小延迟避免闪烁 setTimeout(() => { if (!shown) return; tip.style.display = 'none'; }, 100); shown = false; } anchorEl.addEventListener('mouseenter', show); anchorEl.addEventListener('mousemove', position); anchorEl.addEventListener('mouseleave', hide); } // 导出函数,供其他文件使用 window.attachImmediateTooltip = attachImmediateTooltip;