【发布时间】:2014-07-22 13:55:36
【问题描述】:
在这个问题上摸不着头脑。
我们在页面左侧有一个文本列表。列表中的每个项目都有一个 data-id 属性,可以轻松匹配 SVG 地图中的相应学校。此 SVG 地图是美国地图,学校位置从 CSV excel 表中输入并存储在“学校”中以供访问。
circles.selectAll("circles")
.data(schools)
.enter().append("svg:a")
.attr("xlink:href", function(d) { return d.url; })
.append("svg:circle")
.attr("school", function(d, i) { return d.name; })
.attr("id", function(d, i) { return d.id; })
.attr("cx", function(d,i) { return d.longitude; })
.attr("cy", function(d,i) { return d.latitude; })
.attr("r", function(d,i) { return 6; })
.attr("i", function(d,i) { return i; })
.attr("class", "icon")
所以当用户将鼠标悬停在我之前提到的这个文本列表上时,我使用这个函数:
mapSearch = function(id) {
d3.selectAll("circle")
.filter(function(d) {
if (d.id == id) {
return show_bubble_2(d);
}
})
}
调用者:
show_bubble_2 = function(school_data) {
var school_info = school_data,
latitude = school_info.latitude,
longitude = school_info.longitude;
bubble.css({
"left": (longitude - 75)+"px",
"top": (latitude - 67)+"px"
});
bubble.html("<h1>" + school_info.name + "</h1>" + "<p>" + school_info.city + ", " + school_info.state + "</p>")
.attr("class", function(d) { return school_info.letter; });
bubble.addClass("active");
}
除非我们开始调整地图大小以适应不同的屏幕尺寸,或者除非我们在地图上执行特殊的缩放功能,否则此方法有效。然后离西海岸更近的气泡是它们应该在的地方,但东海岸的那些离得很远。简而言之,这是一场彻头彻尾的噩梦,根本无法扩展。
我的问题:如何将此 DIV 附加到相应的圆圈 ID 而不是使用绝对定位的 DIV,以便无论地图大小,气泡始终会在该圆圈的顶部弹出.
我已经尝试在 if (d.id == id) { } 中附加,但它总是返回错误,到目前为止我还没有弄清楚。我会继续沿着这些思路尝试一些东西,因为我觉得这就是这样做的方式。如果您有更好的解决方案或可以为我指明正确的方向,我将不胜感激。
谢谢,祝你好运!
【问题讨论】: