有一个 SVG 地图,悬停时会出现一个 div 块,其中包含有关 mousemove 事件的信息
但是根据风水不可能居中..有一些我不知道如何摆脱的静态单位
我的尝试
片段的长度不允许,因此我插入链接:https ://codepen.io/topicstarter/pen/PobbbZN
const svg = document.getElementById("svg-map");
const info = document.querySelector(".info");
const child = svg.querySelectorAll("path");
svg.onmousemove = function(e) {
e = window.event;
child.forEach(function(el) {
info.style.opacity = 1;
info.innerHTML = e.target.getAttribute("title");
});
info.style.left = e.clientX - 200 + "px";
info.style.top = e.clientY + 20 + "px";
};
svg.onmouseout = function() {
info.style.opacity = "0";
};
无法得到这个结果

您需要根据 pageX / Y 定位,因为它会在滚动时中断。info 放在 svg-outer 之前,因为父级 (svg-outer) 是相对定位的,子级分别相对于父级而不是文档的左上边缘进行缩进 (left, top)
https://codepen.io/dratovannyi/pen/KKNNaQj
对于风水:
(*1)
Math.max(X_MIN, Math.min(X_MAX, e.pageX - INFO_WID / 2));: X_MIN, X_MAX - 将工具提示保持在屏幕之外的限制器。X_MAX = window.innerWidth - INFO_WID - 20- 当涉及到ширина_экрана - своя_ширина.(*2)
e.pageY + (e.pageY + 20 < Y_MAX ? (20) : (-info.offsetHeight - 20));- 有点不同,如果工具提示没有超出屏幕,则y需要添加到光标的 - 坐标,或者减去它以使其位于光标上方。+20px-20 - высоту_подсказки