鼠标悬停效果 D3.js
Mouseover Effect D3.js
我一直在尝试修改 D3 提供的示例.js以创建一个阶跃图,我可以将鼠标悬停在每个步骤上以获取值的详细信息。
目前我正在查看:
http://bl.ocks.org/mbostock/3902569
我的情节是这样的:
http://jsfiddle.net/q47r3pyk/
在玩了几个小时的 JavaScript 之后。它接近我的最终结果,但如果您尝试将鼠标悬停在点上,则只会在屏幕的左侧手柄侧获得一个值。
如何让悬停效果显示在放置鼠标的位置上?
任何关于我做错了什么的建议将不胜感激。
我的鼠标悬停部分如下所示:
var focus = svg.append("g")
.attr("class", "focus")
.style("display", "none");
focus.append("circle")
.attr("r", 4.5);
focus.append("text")
.attr("x", 9)
.attr("dy", ".35em");
svg.append("rect")
.attr("class", "overlay")
.attr("width", width)
.attr("height", height)
.on("mouseover", function() { focus.style("display", null); })
.on("mouseout", function() { focus.style("display", "none"); })
.on("mousemove", mousemove);
function mousemove() {
var x0 = x.invert(d3.mouse(this)[0]),
i = bisectDate(formatted_data, x0, 1),
d0 = formatted_data[i - 1],
d1 = formatted_data[i],
d = x0 - d0.x > d1.x - x0 ? d1 : d0;
focus.attr("transform", "translate(" + x(d.x) + "," + y(d.y) + ")");
focus.select("text").text(d.y);
我认为你想调整你的bisectDate
函数(如你链接的jsfiddle所示)。
如果您使用:
bisectDate = d3.bisector(function(d) { return d.x; }).left;
(使用 d.x
而不是 d.date
),它对我有用。
这是因为您将x
坐标存储在x
(以 formatted_data
为单位),而 Mike Bostock 的示例使用 .date
。因此,d3.bisect
找不到适当的值。
相关文章:
- 如何在d3.js中返回路径的y坐标
- 有条件更新d3.js力图中节点的最佳方法
- 使用D3.js计算带有字母间距的文本长度
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- HTML5FileReader输出到D3.js图表
- D3.js生成有效的SVG,但不显示任何内容
- d3.js:限制画笔的大小
- d3.js用按钮更新条形图工具提示
- 如何为d3.js图表输出组织/嵌套数据
- d3-js快速事件调用问题
- D3.JS向rect添加缩放和列表项
- d3.js圆的半径是否可以由样式属性指定
- 如何在d3.js中自定义事件侦听器
- 在新窗口上使用d3.js
- 如何用d3.js绘制折线图
- 使用dc.js、d3.js和crossfilter引用错误
- D3.js剪辑路径截断了我的图的边缘
- D3.js和坐标系