【发布时间】:2019-12-16 14:37:25
【问题描述】:
注意:我问过this question about interrupting transitions during a scroll,但现在我正在尝试一种不同的技术,这会导致类似的问题无法通过接受(且有效)的答案得到解决。
这一次,我不想用 0 不透明度初始化所有图形并使用单独的函数来更改在每个步骤中调用的不透明度,我想在每个绘图函数中使用 selection.remove()。我想这样做,以便视野外的图表不会妨碍我在当前图表上可能想要的任何鼠标悬停交互。
例如,我有一些函数可以清除现有图形,然后通过一些过渡绘制当前图形:
var makeCircle0 = function() {
d3.selectAll(".nancygraphs").interrupt().remove()
g.append("circle")
.attr("cx", 50)
.attr("cy", 100)
.attr("r", 20)
.attr("fill", "red")
.attr("id", "red")
.attr("opacity", 0)
.transition()
.duration(1000)
.attr("opacity", 1)
.attr("class", "nancygraphs")
}
这些函数放在一个列表中
var activateFunctions = [];
activateFunctions[0] = makeCircle0;
activateFunctions[1] = makeCircle1;
activateFunctions[2] = makeCircle2;
activateFunctions[3] = makeCircle3;
根据步骤,调用函数来绘制正确的图形
function handleStepEnter(response) {
console.log(response)
step.classed('is-active', function(d, i) {
return i === response.index;
})
figure.select('p').text(response.index);
figure.call(activateFunctions[response.index]) // HERE!
}
Here is a jsfiddle 来说明。基本上,如果您快速来回滚动,则旧图形不会被清除,您会注意到同时出现多个图形。为什么d3.selectAll(".nancygraphs").interrupt().remove() 不做这项工作?
【问题讨论】:
标签: javascript d3.js