通常,当您在D3.js中附加一个对象并且想要定义一个特定的可视化(例如,显示在另一个对象顶部的信息框)时,您可以设置一个样式。在我的情况下,我正在尝试这个:
...
.on("mouseover", function (d, i) {
graph.append("div")
.attr("class","info-box")
// info-box is defined with position: absolute
.style("top", height - (yV * d))
.style("left", (xV * i))
.text("INFO")
}
...
因此,如果我将鼠标悬停在我用这段代码定义的一个对象上(假设它是一系列竖条中的第二个),应该会出现一个包含以下代码的框:
<div class="info-box" style="top: 30; left: 10">
INFO
</div>
问题是,出于某种原因,当代码生成框时,它没有设置我定义的样式,事实上,属性"style"根本没有出现,考虑到我希望这个框出现在我悬停的栏的顶部,这很烦人。
这种情况发生在我正在Spring MVC中编写的代码中。更准确地说,我从一个自定义标记生成javascript代码,该标记接收几个参数,然后它在用这些参数调用它的jsp中"渲染"。我不知道它是否有什么关系,但我很确定两件事:
- 与其他javascript文件没有"冲突",因为d3是我在代码中使用的唯一.js
- jsp中生成的javascript代码与普通html页面中预期的完全相同
有什么解决办法吗?Spring中的一些配置阻止我使用嵌套在HTML中的样式?我真的很想知道答案,因为这让我疯了,我需要尽快解决。
最后两个注意事项:
- 我已经尝试过使用attr("style","top:"+(height-(yV*d))+";left"+(xV*I)+"),但它不起作用。:(
- 使用类不是一种选择,因为这在很大程度上取决于我悬停的对象的值,并且我不能为所有可能的场景创建一个类(在这样做之前,我会切开我的血管)
您只需要添加单位,在本例中为"px",就可以设置这些css属性。
.on("mouseover", function (d, i) {
graph.append("div")
.attr("class","info-box")
// info-box is defined with position: absolute
.style("top", (height - (yV * d)) + 'px')
.style("left", (xV * i) + 'px')
.text("INFO")