nvd3.js 折线图中的自定义工具提示
Custom tooltip in lineChart of nvd3.js
如何在 nvd3.js 的折线图中创建自定义工具提示?,我想在工具提示中添加一个“总计”值,类似这样
我尝试调用 chart.tooltip.contentGenerator 来创建自定义工具提示,但数据为空
chart.tooltip.contentGenerator(function(data) {
console.log(data) //empty
});
我只使用 nvd3 1.8.5 版和 d3 3.5.9 版,
这是我的 fiddle:sample
请尝试使用 chart.interactiveLayer.tooltip.contentGenerator
。使用此行测试您的代码,我能够观察数据变量中的值,如下所示:
从这里您可以根据需要构建或编辑您的自定义工具提示。让我知道它是否适合你。
[编辑 - 包含事件行为的建议]
查看 NVD3 内部,我意识到工具提示的 contentGenerator 包含为工具提示添加事件行为的所有特定代码。如果你看一下原始工具提示,它使用一个名为 highlight 的 class 来标记聚焦颜色,但自定义工具提示有没有实现这个事件,也没有突出重点颜色。
我知道这是倒退,一旦您为这个自定义工具提示编写了自己的代码,但似乎实现此目的的唯一方法是重新构建您的代码以包含事件行为。也许从 NVD3 包含的原始代码开始创建工具提示 usign contetGenerator 会有所帮助(这就是我会采用的方式,但如果您愿意在当前代码上实现它,则取决于您)。
如果您想查看此代码,请找到适合您的 NVD3 版本的 tooltip.js 或访问此 GitHub link
在这个文件中,如果你检查第 83 行,在文件中搜索“highlight”,你可以看到事件 enter() 为 table body 内的所有 tr 元素实现,添加 class名称突出显示.
var trowEnter = tbodyEnter.selectAll("tr")
.data(function(p) { return p.series})
.enter()
.append("tr")
.classed("highlight", function(p) { return p.highlight});
我的建议是将所有这些代码(我的意思是全部在 contentGenerator 函数内)用于您的自定义 contentGenerator,这样您就可以确保所有 HTML 代码都是按照原始代码生成的,即使有关联的行为,然后覆盖它以包含您为标题所做的自定义。
请试试这个,如果你能设法解决问题,请告诉我。
@戴夫·米勒
谢谢楼主,我也弄明白了,不分享就抱歉了。我这样做\
也许我做了很长的方法,无论如何谢谢!
如何在 nvd3.js 的折线图中创建自定义工具提示?,我想在工具提示中添加一个“总计”值,类似这样
我尝试调用 chart.tooltip.contentGenerator 来创建自定义工具提示,但数据为空
chart.tooltip.contentGenerator(function(data) {
console.log(data) //empty
});
我只使用 nvd3 1.8.5 版和 d3 3.5.9 版, 这是我的 fiddle:sample
请尝试使用 chart.interactiveLayer.tooltip.contentGenerator
。使用此行测试您的代码,我能够观察数据变量中的值,如下所示:
从这里您可以根据需要构建或编辑您的自定义工具提示。让我知道它是否适合你。
[编辑 - 包含事件行为的建议]
查看 NVD3 内部,我意识到工具提示的 contentGenerator 包含为工具提示添加事件行为的所有特定代码。如果你看一下原始工具提示,它使用一个名为 highlight 的 class 来标记聚焦颜色,但自定义工具提示有没有实现这个事件,也没有突出重点颜色。
我知道这是倒退,一旦您为这个自定义工具提示编写了自己的代码,但似乎实现此目的的唯一方法是重新构建您的代码以包含事件行为。也许从 NVD3 包含的原始代码开始创建工具提示 usign contetGenerator 会有所帮助(这就是我会采用的方式,但如果您愿意在当前代码上实现它,则取决于您)。
如果您想查看此代码,请找到适合您的 NVD3 版本的 tooltip.js 或访问此 GitHub link
在这个文件中,如果你检查第 83 行,在文件中搜索“highlight”,你可以看到事件 enter() 为 table body 内的所有 tr 元素实现,添加 class名称突出显示.
var trowEnter = tbodyEnter.selectAll("tr")
.data(function(p) { return p.series})
.enter()
.append("tr")
.classed("highlight", function(p) { return p.highlight});
我的建议是将所有这些代码(我的意思是全部在 contentGenerator 函数内)用于您的自定义 contentGenerator,这样您就可以确保所有 HTML 代码都是按照原始代码生成的,即使有关联的行为,然后覆盖它以包含您为标题所做的自定义。
请试试这个,如果你能设法解决问题,请告诉我。
@戴夫·米勒
谢谢楼主,我也弄明白了,不分享就抱歉了。我这样做\
也许我做了很长的方法,无论如何谢谢!