javascript - d3 - 如何在数组上设置动画

标签 javascript animation d3.js transition

我是 d3 的新手。目前我可以根据一组数据绘制圆圈 - 哇 - 我知道 :-) 但现在我只想在为整个数组设置动画时一次绘制两个圆圈。假设我的数组中有 1000 个元素,我想同时绘制 1 和 2,然后绘制 2 和 3、3 和 4,依此类推。这应该得到一个非常漂亮的动画 :-) 我玩过我索引的函数和 exit().remove() 但这不起作用。

这是我的:

var w = 500;
        var h = 300;
        var padding = 20;

        var dataset = [
                        [5, 20], [480, 90], [250, 50], [100, 33], [330, 95],
                        [410, 12], [475, 44], [25, 67], [85, 21], [220, 88],
                        [600, 150]
                      ];

        //Create SVG element
        var svg = d3.select("body")
            .append("svg")
            .attr("width", w)
            .attr("height", h);

        //Create scale functions
        var xScale = d3.scale.linear()
            .domain([0, d3.max(dataset, function(d) { return d[0]; })])
            .range([padding, w - padding * 2]);

        var yScale = d3.scale.linear()
            .domain([0, d3.max(dataset, function(d) { return d[1]; })])
            .range([h - padding, padding]);

        //Create circles
        svg.selectAll("circle")
               .data(dataset.slice(0,2))
               .enter()
               .append("circle")
               .attr("cx", function(d) {
                    return xScale(d[0]);
               })
               .attr("cy", function(d) {
                    return yScale(d[1]);
               })
               .attr("r",10);

        for (var i=0; i<4;i++) {

            svg.selectAll("circle").data(dataset.slice(i,i+2)).transition().duration(2000).delay(2000)
            .attr("cx", function(d) {
                    return xScale(d[0]);
               })
               .attr("cy", function(d) {
                    return yScale(d[1]);
               })
               .attr("r", 10);
            //svg.selectAll("circle").data(dataset.slice(i,i+1)).exit().remove();
            console.log(dataset.slice(i,i+2));
        }

但我只会得到一个动画,而不是 4 个 .. 嗯 .. 出了什么问题?

最佳答案

延迟函数接受回调,因此无需将您的选择包装在 for 循环中。

    .delay( function(d, i) { (2000*i); } )

关于javascript - d3 - 如何在数组上设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491922/

相关文章:

javascript - 我有问题,我的组件无法更新第二个组件的属性 - Vuejs

javascript - 使用 prevAll() 时选择时无法正确更新值

ios - 在 ios 中的动画期间,对 imageview 的手势不起作用

wpf - 使用 Xaml 和 WPF,如何在单击时为属性设置动画,然后在连续单击时反转

javascript - 滚动时有多个动画

javascript - ( flask ,d3) Uncaught ReferenceError : d3 is not defined

javascript - 我将如何在响应式网格中安排 div? (Wolfram.com 风格)

javascript - 从下拉列表中选择 javascript 事件

javascript - 使用 Rickshaw.Graph.Ajax 时如何显示数据

d3.js - 在 d3.js 中设置对数刻度的基础