【发布时间】:2012-08-19 08:41:06
【问题描述】:
我使用 KineticJS 和 D3.js 制作了以下内容。当用户将鼠标悬停在其中一个点上时,我使用 KineticJS 让我弹出工具提示。但是,由于画布的边界,工具提示似乎被截断。有没有办法让它在不被剪裁的情况下显示出来?
整个代码本身非常庞大,包含很多不相关的东西,所以我发布了相关的 sn-ps:
this.stage = new Kinetic.Stage({
container: 'canvas',
width: this.WIDTH,
height: this.HEIGHT
});
this.circlesLayer = new Kinetic.Layer();
this.tooltipLayer = new Kinetic.Layer();
this.stage.reset();
this.stage.clear();
// Some d3 specific code
this.xRange.domain([
d3.min(this.data, function(d) {
return d.x;
}), d3.max(this.data, function(d) {
return d.x;
})]);
this.yRange.domain([
d3.min(this.data, function(d) {
return d.y;
}), d3.max(this.data, function(d) {
return d.y;
})]);
var axes_transition = d3.select("#" + this.div).transition().duration(1000).ease("exp-in-out")
// transition the axes
axes_transition.select(".x.axis").call(this.xAxis);
// Drawing the circles
this.last = this.data.map(this.position);
this.last.forEach(this.kineticCircle);
// Setting up the tooltip
this.tooltip = new Kinetic.Text({
text: "",
fontFamily: "Calibri",
fontSize: 12,
padding: 5,
visible: false,
fill: "black",
//alpha: 0.75,
textFill: "white"
});
this.tooltipLayer.add(this.tooltip);
this.stage.add(this.circlesLayer);
this.stage.add(this.tooltipLayer);
【问题讨论】:
-
当然不能在画布元素之外绘制
-
请问您为什么同时使用 KineticJS 和 d3.js?它们不是都是可视化功能,而是面向不同的应用程序吗?
-
@AndrewMao:是的。但是,如果要渲染的图形元素数量超过 2000 个(例如 svg 圆圈),d3.js 就会开始出现问题。这就是 KineticJS 发挥作用的地方。我能够成功渲染超过 100K 的圆圈而没有任何问题。我可以直接使用 KineticJS,但是 d3 提供了很多很酷的数据操作功能。
-
您能进一步澄清一下吗?您是否使用 d3 来操作/定义数据并使用 KineticJS 来绘制它?如果是这样,是否有将两者联系在一起的库,或者您自己制作的东西?我在这里发布了一个类似的问题,也许你可以帮忙:stackoverflow.com/questions/12310024/…
标签: javascript html canvas d3.js kineticjs