javascript - mousemove 和 mouseover 不适用于 d3 图表中的最后一个数据
问题描述
在我的 D3 图表中,mousemove 和 mouseover 不适用于所附图片中描述的最后一个数据。
它总是将工具提示显示到倒数第二个元素。我也有最后一个的数据,但它仅在图表中显示 mousemove 和 mouseover 到倒数第二个元素(线和圆)。
var data = [
{
startTime: "1567765320049",
magnitude: 0
},
{
startTime: "1567851720049",
magnitude: 0
},
{
startTime: "1568024520049",
magnitude: 10
},
{
startTime: "1568283720049",
magnitude: 10
},
{
startTime: "1568629320049",
magnitude: 0
},
{
startTime: "1569061320049",
magnitude: 0
},
{
startTime: "1569579720049",
magnitude: -20
},
{
startTime: "1570184520049",
magnitude: -20
},
{
startTime: "1570875720049",
magnitude: 0
},
{
startTime: "1571653320049",
magnitude: 10
},
{
startTime: "1572517320049",
magnitude: 0
},
{
startTime: "1573467720049",
magnitude: 0
},
{
startTime: "1574504520049",
magnitude: 10
},
{
startTime: "1575627720049",
magnitude: 10
}
];
我在这里有一个工作代码沙箱 -
https://codesandbox.io/s/sad-bell-qqwwe
谢谢。
解决方案
这就是我解决此问题的方法,我得到了最接近鼠标的日期值并显示在工具提示中。
.on("mouseover", function(d) {
focus.style("display", null);
div
.transition()
.duration(200)
.style("opacity", 0.9);
})
.on("mouseout", function() {
focus.style("display", "none");
div
.transition()
.duration(300)
.style("opacity", 0);
})
.on("mousemove", function() {
var mouse = d3.mouse(this);
var mouseDate = xScale.invert(mouse[0]);
var i = bisectDate(data, mouseDate); // returns the index to the current data item
var d0 = data[i - 1];
var d1 = data[i];
let d;
// work out which date value is closest to the mouse
if (typeof d1 !== "undefined") {
d = mouseDate - d0.startTime > d1.startTime - mouseDate ? d1 : d0;
} else {
d = d0;
}
div
.html(
`<span>${parseDate(d.startTime)}</span>
<span>Magnitude: ${d.magnitude} </span>`
)
.style("left", d3.event.pageX + "px")
.style("top", d3.event.pageY - 28 + "px");
var x = xScale(d.startTime);
var y = yScale(d.magnitude);
推荐阅读
- azure - 添加动态内容 - Azure 数据工厂 ADF V2
- java - Spring Boot 的 Elasticsearch Searchguard 配置
- java - 无法在 Spring Boot 应用程序中解析符号“安全”
- mysql - 记录 SQL 查询
- loops - 循环遍历嵌套的 SASS 映射以创建类
- ios - 在所选类型的标签栏项目上设置徽章(不知道其索引)
- python - 使用 groupby 操作将 Pandas 代码转换为 PySpark
- r - 如何将数据框的行添加到另一个数据框的列中
- excel - Excel公式根据B列中的相对单元格值返回A列中单元格的值
- reactjs - 如何构建一个只有几条公共路线的 React 应用程序?