当从 csv 更新数据时,d3 在 setInterval 上闪烁文本
d3 flickering Text on setInterval when update data from csv
我是 d3 的新手,正在学习很多东西。我在更新数据时遇到一点问题,我从 csv 文件中获取数据。
我使用 setInterval() 每秒更新一次数据。
当它删除并再次插入数据时,它会闪烁几毫秒(table 消失并生成一个新的 table)。
我究竟做错了什么?我怎样才能摆脱闪烁?
感谢您的帮助! :-)
这是我的代码:
<script type="text/javascript">
d3.text("data.csv", function(data) {
var parsedCSV = d3.csv.parseRows(data);
var container = d3.select("body")
.append("table")
.selectAll("tr")
.data(parsedCSV).enter()
.append("tr")
.selectAll("td")
.data(function(d) { return d; }).enter()
.append("td")
.text(function(d) { return d; });
});
var inter = setInterval(function() {
updateData();
}, 1000);
function updateData() {
d3.text("data.csv", function(data) {
var parsedCSV = d3.csv.parseRows(data);
var container = d3.select("body")
.append("table")
.selectAll("tr")
.data(parsedCSV).enter()
.append("tr")
.selectAll("td")
.data(function(d) { return d; }).enter()
.append("td")
.text(function(d) { return d; });
});
d3.select("body").selectAll("tr")
.remove()
}
</script>
将 transition() 添加到 enter/exit/remove 调用将解决您的闪烁问题。
var circleData = [50, 40, 30, 60, 70];
var svg = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 5000)
var circle = svg.append("circle")
.attr("cx", 100)
.attr("cy", 100)
.attr("r", 25);
setTimeout(function() {
updateCircles(circleData)
}, 2500)
function updateCircles(data) {
var circles = svg.selectAll("circle")
.data(circleData);
circles.enter()
.append("circle")
.attr("cx", 100)
.attr("cy", function(d, i) {
return (i + 1) * 100
})
.attr("r", 0)
.attr("fill", 'yellow')
.transition()
.duration(1500)
.attr("r", function(d) {
return d;
});
circles.transition()
.duration(1500)
.delay(1500)
.style('fill', 'green')
.attr('r', function(d) {
return d;
});
circles.exit()
.transition().duration(1500).delay(1500)
.style("fill", "red")
.transition().duration(1500).delay(3000)
.attr("r", 0).transition().remove();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
我是 d3 的新手,正在学习很多东西。我在更新数据时遇到一点问题,我从 csv 文件中获取数据。
我使用 setInterval() 每秒更新一次数据。 当它删除并再次插入数据时,它会闪烁几毫秒(table 消失并生成一个新的 table)。 我究竟做错了什么?我怎样才能摆脱闪烁?
感谢您的帮助! :-)
这是我的代码:
<script type="text/javascript">
d3.text("data.csv", function(data) {
var parsedCSV = d3.csv.parseRows(data);
var container = d3.select("body")
.append("table")
.selectAll("tr")
.data(parsedCSV).enter()
.append("tr")
.selectAll("td")
.data(function(d) { return d; }).enter()
.append("td")
.text(function(d) { return d; });
});
var inter = setInterval(function() {
updateData();
}, 1000);
function updateData() {
d3.text("data.csv", function(data) {
var parsedCSV = d3.csv.parseRows(data);
var container = d3.select("body")
.append("table")
.selectAll("tr")
.data(parsedCSV).enter()
.append("tr")
.selectAll("td")
.data(function(d) { return d; }).enter()
.append("td")
.text(function(d) { return d; });
});
d3.select("body").selectAll("tr")
.remove()
}
</script>
将 transition() 添加到 enter/exit/remove 调用将解决您的闪烁问题。
var circleData = [50, 40, 30, 60, 70];
var svg = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 5000)
var circle = svg.append("circle")
.attr("cx", 100)
.attr("cy", 100)
.attr("r", 25);
setTimeout(function() {
updateCircles(circleData)
}, 2500)
function updateCircles(data) {
var circles = svg.selectAll("circle")
.data(circleData);
circles.enter()
.append("circle")
.attr("cx", 100)
.attr("cy", function(d, i) {
return (i + 1) * 100
})
.attr("r", 0)
.attr("fill", 'yellow')
.transition()
.duration(1500)
.attr("r", function(d) {
return d;
});
circles.transition()
.duration(1500)
.delay(1500)
.style('fill', 'green')
.attr('r', function(d) {
return d;
});
circles.exit()
.transition().duration(1500).delay(1500)
.style("fill", "red")
.transition().duration(1500).delay(3000)
.attr("r", 0).transition().remove();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>