javascript - 如何在具有缩放功能的时间轴中的 d3 v4 中添加过滤器或 ScaleExtent

标签 javascript d3.js svg zooming

我正在处理 d3 版本 4 中的时间轴。所以我创建了一个 SVG 并在该 SVG 上添加了 axiszoom 作为下面。

var timeLineSVG = d3.select("body")
                .append("svg")
                .attr("width", 300)
                .attr("height", 300);
var xScale = d3.scaleTime()
            .domain([Date.parse("April 1, 2017"), Date.parse("April 30, 2017")])
            .range([0, 300]);

var xAxis = d3.axisTop(xScale);

var timeLineZoom = d3.zoom(xScale)
                    .on("zoom", onTimeLineZoom);

var timeLineGraphics = timeLineSVG.append("g")
                                .attr("transform", "translate(0,40)")
                                .call(xAxis);
timeLineSVG.call(timeLineZoom);

function onTimeLineZoom(event) {
    var tempScale = d3.event.transform.rescaleX(xScale);
    timeLineGraphics.call(xAxis.scale(tempScale));
}

比例尺的范围将根据数据发生变化。所以我想只允许缩放到天级别而不超过天级别

这是 small example what I have done.

我们可以在缩放实例上使用 scaleextent 属性,但值是多少以及我们如何在不进行硬编码的情况下进行计算。

最佳答案

您可以使用 scaleExtend([minScaleFactor, maxScaleFactor]) 来控制它。 示例:d3.zoom().scaleExtend([0.5, 10])

关于javascript - 如何在具有缩放功能的时间轴中的 d3 v4 中添加过滤器或 ScaleExtent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45238666/

相关文章:

javascript - jQuery 将类添加到第一项,直到单击另一个

javascript - Ember.js 在特定页面上包含外部脚本

javascript - 如何在 D3.js 中的 map 投影上绘制点并使用范围 slider 过滤数据?

javascript - SVG 月相

javascript - 使用 Sequelize 时,我是否必须遵循他们的表/字段名称模式?

javascript - 如何删除 JSON 中最后一个斜杠内容

javascript - 捕捉 SVG 路径动画

javascript - 无法在加载的 svg 上调用 getElementsByTagName

javascript - d3 饼图不会重新渲染

javascript - 如何在 d3 js 中突出显示从根到选定节点的路径?