尝试探索Chapter 10 of Scott Murray's Interactive Data Visualization for the Web中的工具提示部分。这比使用HTML标签要复杂一些,但它也可以提供更多的灵活性和功能。
使用工具提示的基本思想是,您首先使用CSS标准在<style>
部分中定义它们的外观。接下来,你在你的<script>
之前定义一个占位符,它将设置该类为“隐藏”。然后,在<script>
部分中,您定义了mouseover
和mouseout
函数,这些函数定义(1)标签应显示的位置,以及(2)他们应该说的内容,以及(3)将类从不可见变为可见。
我也是一个初学者,但我从字面上就是这样做了这个map。相关的代码段包括:
样式化的工具提示(在<style>
头;这是直接从斯科特默里教程截取):
#tooltip {
position: absolute;
width: 230px;
height: auto;
padding: 10px;
background-color: white;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4);
pointer-events: none;
}
#tooltip.hidden {
display: none;
}
#tooltip p {
margin: 0;
font-family: sans-serif;
font-size: 16px;
line-height: 20px;
}
接着,设置一个提示占位符(在<body>
,上方的<script>
):
<div id="tooltip" class="hidden" style="left: 429px, top: 489.6px">
<p><strong><span id="city">Dar es Salaam</span></strong></p>
<p id="population">Population: 4 million</p>
</div>
最后,该mouseover
功能:
function mouseover(d) {
d3.select(this).style("fill", "orange");
var mousecoord = [0,0];
mousecoord = d3.mouse(this);
d3.select("#tooltip")
.style("left", mousecoord[0] + "px")
.style("top", mousecoord[1]-75 + "px");
d3.select("#city")
.text(d.city);
d3.select("#population")
.text(function() { return year + " population: " + comma(d["y"+year]); });
d3.select("#tooltip").classed("hidden", false);
};
mouseout
功能留给读者练习。 :)请注意,工具提示显示的是鼠标进入圆圈时的位置(这是mousecoord
的东西)。
最后,你只需要调用mouseover
和mouseout
功能,当你绘制你的所有圈子:
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
(blah blah)
.on("mouseover", mouseover)
.on("mouseout", mouseout);