javascript - 如何将工具提示添加到 react + d3 分组和堆叠条形图?
问题描述
我用 react + d3 创建了一个堆叠和分组的条形图,我想添加工具提示,我尝试了不同的方法,但没有一个起作用。工具提示的代码如下所示:
const tooltip = select(svgRef.current)
.append("div")
.style("position", "absolute")
.style("visibility", "visible")
.style("background-color", "black")
.style("border", "solid")
.style("border-width", "1px")
.style("border-radius", "5px")
.style("padding", "10px")
.html("<p>I'm a tooltip written in HTML</p>");
svg
.select(".barreact")
.on("mouseover", function () {
return tooltip.style("visibility", "visible");
})
.on("mousemove", function () {
return tooltip
.style("top", event.pageY + "px")
.style("left", event.pageX + "px");
})
.on("mouseout", function () {
return tooltip.style("visibility", "hidden");
});
您可以在演示中查看完整的代码和演示
任何帮助使其工作将不胜感激
解决方案
使用 SVGforeignObjects
将 HTML 附加到 SVG:
const tooltip = select(svg)
.append("foreignObject")
.attr("width", 180);
const tooltipDiv = tooltip
.append("xhtml:div")
.html("<p>I'm a tooltip written in HTML</p>");
请注意,我们只设置宽度。高度是通过查看设置了宽度的 div 的高度来动态计算的:您也可以做相反的事情,设置高度并内省宽度:
bars.on("mousemove", function () {
const htmlContentHeight = tooltipDiv.node().getBoundingClientRect()
.height;
tooltip.attr("height", htmlContentHeight);
tooltip.raise();
return tooltip
.attr("x", event.pageX)
.attr("y", event.pageY - htmlContentHeight);
})
由于 SVG 没有 z-index,我们必须将最后一个元素放在 SVG 的顶部,我们可以使用selection.raise
.
推荐阅读
- angular - 以角度发布来自 API 的显示数据
- javascript - fetchAll 在 Javascript 中导致“无法读取属性”错误
- c - .c 文件中的静态函数/变量
- java - 从 Ebay API 获取 Paypal TransactionID
- python - 如何在 python 中为变量添加字符串前缀?
- perl - 将一行中的唯一值转换为单独的行
- python - 为几个 excel 工作表运行此脚本( FOR 循环功能)
- r - 接收零计数的百分比
- python - Flask Admin 模型视图页面自动刷新
- node.js - 将 Mongoose 嵌套模式发布到 MongoDB