d3.js Zoom&平移时间线 - 如何显示动态时间线范围?

时间:2017-08-01 06:22:35

标签: d3.js

我有一个缩放和平移时间轴,可以沿x轴正确缩放。我试图在缩放或平移时获得x轴的实时状态。如何获取这些date_min和date_max变量?

这是我的jsfiddle:https://jsfiddle.net/thinkin3d/gkL821fm/

此交互式时间轴的最终目的是获得实时缩放/平移状态,并将该状态数据发送回服务器以请求此新时间范围的数据。

在上面的jsfiddle中,div用于渲染" x-min"和" x-max"但我不知道如何正确挂钩到d3轴或缩放功能以获取这些动态状态变量。

这是x函数:

var x = d3.time.scale()
    .domain([new Date(2017, 1, 1), new Date(2018, 1, 1)])
    .range([0, width]);

这是xAxis函数:

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickSize(-height);

这是缩放功能:

var zoom = d3.behavior.zoom()
    .x(x)
    .xExtent([new Date(-2000, 1, 1), new Date(3000, 1, 1)])
    .on("zoom", zoomed);

这是缩放功能:

function zoomed() {
    svg.select(".x.axis").call(xAxis);
}

即使能够使用console.log(),x轴范围也可以工作,但是我在d3和javascript中缺少关于变量绑定和处理方式的基本信息。

请指教!

1 个答案:

答案 0 :(得分:1)

您可以获取Baz,其中包含当前显示的X轴的xAxis.scale().domain()min值。 我在max函数中添加了两行,它对我有用:

zoomed()

要显示此内容,您必须先缩放图表。 这是更新的jsfiddle:https://jsfiddle.net/gkL821fm/2/

修改 要仅在最后一次缩放后更新div,可以使用function zoomed() { svg.select(".x.axis").call(xAxis); document.getElementById('x-min').innerHTML = xAxis.scale().domain()[0]; document.getElementById('x-max').innerHTML = xAxis.scale().domain()[1]; } 内的超时功能,持续时间为1000 ms。您可以根据自己的需要进行更改。一个小的副作用是在最后一次缩放后更新div时会有延迟(等于你设置的持续时间)。

zoomed()

这里,函数首先检查图形是否已经被再次缩放,如果在过去的1000毫秒内没有发生任何变化,则仅更新div。

lastZoomDate = new Date();
setTimeout(function() {
    updateXDiv(new Date());
  }, 1000);

我已更新jsfiddle以包含此修改:https://jsfiddle.net/gkL821fm/3/