【发布时间】:2018-07-14 17:39:03
【问题描述】:
我的 JavaScript 有问题,希望有人能帮助我。 我有一条展开线,它的点一个接一个地显示出来。我想为这条线设置动画,使其遵循here 中的动画。 到目前为止,我已经开发了它,但现在我的动画与上面超链接中的动画不完全一样。谁能帮我顺利过渡?
var width = 400,
height = 400,
margin = {
top: 25,
right: 50,
bottom: 40,
left: 50
},
uid = 0,
datasetSize = 3;
var padding = 30;
var dataset = [];
for (var i = 0; i < datasetSize; i++) {
dataset.push(generateDatum());
}
var datasetOld = dataset;
var xScale = d3.scaleLinear()
.range([0, width])
.domain([0, d3.max(dataset, function(d) {
return d[1];
})])
.nice();
var yScale = d3.scaleLinear()
.range([height, 0])
.domain([0, d3.max(dataset, function(d) {
return d[2];
})])
.nice();
var xAxis = d3.axisBottom()
.scale(xScale)
.ticks(10);
var yAxis = d3.axisLeft()
.scale(yScale)
.ticks(10);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var svgXaxis = svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + (height) + ")")
.call(xAxis);
var svgYaxis = svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + "0)")
.call(yAxis);
var line = d3.line()
.x(function(d) {
return xScale(d[1]);
})
.y(function(d) {
return yScale(d[2]);
})
.curve(d3.curveLinear);
var div = d3.select("body").append("div")
.attr("class", "tooltip")
.style("opacity", 0);
svg.append("path")
.attr("id", "path1")
.datum(dataset)
.attr("class", "line")
.attr("d", line);
// add new data
var count = 0;
var interval = setInterval(function() {
datasetOld = dataset;
var d = generateDatum();
console.log('Adding new point ' + d);
dataset.push(d);
xScale.domain([0, d3.max(dataset, function(d) {
return d[1];
})]);
yScale.domain([0, d3.max(dataset, function(d) {
return d[2];
})]);
svg.selectAll("circle")
.filter(function(d) {
return 4 < (count - d[0])
})
.style('opacity', 1e-6);
var dot = svg.selectAll("circle")
.data(dataset, function(d) {
return d[0]
});
dot.transition()
.duration(300)
.attr("cx", function(d) {
return xScale(d[1]);
})
.attr("cy", function(d) {
return yScale(d[2]);
});
dot.enter()
.append("circle")
.attr("id", function(d) {
return d[0];
})
.attr("cx", function(d) {
return xScale(d[1]);
})
.attr("cy", function(d) {
return yScale(d[2]);
})
.attr("r", 5)
.style('opacity', 1e-6)
.transition()
.duration(500)
.style('fill', 'green')
.style('opacity', 1);
d3.select('#path1')
.attr('d', line(datasetOld))
.transition()
.attr('d', line(dataset));
svgXaxis.transition()
.call(xAxis);
svgYaxis.transition()
.call(yAxis);
count++;
}, 1200);
function generateDatum() {
return [
uid++, parseInt(Math.random() * 400), parseInt(Math.random() * 400)
];
}
【问题讨论】:
标签: javascript d3.js svg path transition