鼠标移入元素时 Tooltip 位置计算不准怎么办?
我用原生 JS 写了个简单的 Tooltip,但鼠标移到按钮上时提示框老是偏移,有时候还跑到屏幕外面去了。明明用了 getBoundingClientRect() 获取位置,为啥还是对不齐?
这是我的定位逻辑:
const rect = target.getBoundingClientRect();
tooltip.style.left = rect.left + window.scrollX + 'px';
tooltip.style.top = rect.top + window.scrollY - tooltip.offsetHeight - 5 + 'px';
在缩放页面或者滚动后问题更明显,是不是漏了啥边界判断?
第一个问题是
tooltip.offsetHeight在 tooltip 还没渲染出来或者 display:none 的时候是 0,你先减了 0 再定位,结果肯定歪。得先把它插进 DOM 里、显示出来,或者用getComputedStyle算出高度再定位。第二个问题是你没考虑 viewport 边界。比如按钮在页面最底下,你直接往上顶,tooltip 可能直接顶出屏幕顶部。得加个兜底逻辑,比如:
第三个坑是缩放页面时
window.scrollX和window.scrollY并不会自动更新 tooltip 的位置,你得在resize或scroll事件里重新计算,或者用position: fixed+ 相对视口计算(但要注意 tooltip 自己的定位参考系)。最后提醒一句,如果 tooltip 内容来自用户输入,记得
textContent替代innerHTML,防止注入。