Javascript 在D3.js中设置超时
我试图在D3.js中实现缩放行为,方法如下 块中有一段代码,我不明白。我知道Javascript 在D3.js中设置超时,javascript,d3.js,Javascript,D3.js,我试图在D3.js中实现缩放行为,方法如下 块中有一段代码,我不明白。我知道setTimeout的行为,但不确定它是如何和为什么这样使用的,以及它如何与代码的其余部分相适应 我已经尝试过仔细地调试和检查每个断点,但我不明白它的主要目的,也不明白每个阶段都发生了什么 function brushended() { var s = d3.event.selection; if (!s) { if (!idleTimeout) return idleTimeout = setTimeo
setTimeout
的行为,但不确定它是如何和为什么这样使用的,以及它如何与代码的其余部分相适应
我已经尝试过仔细地调试和检查每个断点,但我不明白它的主要目的,也不明白每个阶段都发生了什么
function brushended() {
var s = d3.event.selection;
if (!s) {
if (!idleTimeout) return idleTimeout = setTimeout(idled, idleDelay);
x.domain(x0);
y.domain(y0);
} else {
x.domain([s[0][0], s[1][0]].map(x.invert, x));
y.domain([s[1][1], s[0][1]].map(y.invert, y));
svg.select(".brush").call(brush.move, null);
}
zoom();
}
function idled() {
idleTimeout = null;
}
不确定这类问题(解释一段代码)是否适合堆栈溢出,但我真的想了解这里发生了什么,而不仅仅是复制粘贴解决方案。如果有人能解释这一点,那就太好了。谢谢。我认为空闲超时部分的目的是,当用户双击鼠标时,将光标移到原始视图。i、 e.当点击分开时,它不会放大,而是缩小。 通过添加我在下面展示的两个控制台日志语句,您可能会发现更清楚地理解这些代码。尝试双击,然后在单击过程中稍微移动光标
function brushended() {
var s = d3.event.selection;
if (!s) {
if (!idleTimeout) return idleTimeout = setTimeout(idled, idleDelay);
x.domain(x0);
y.domain(y0);
} else {
console.log('zoom set')
x.domain([s[0][0], s[1][0]].map(x.invert, x));
y.domain([s[1][1], s[0][1]].map(y.invert, y));
svg.select(".brush").call(brush.move, null);
}
zoom();
}
function idled() {
console.log('idled')
idleTimeout = null;
}
很高兴你问这个问题。我当时也在同一条船上。最后,我想我从下面的回答中得到了一些理解。我希望Mike Bostock的代码得到更好的评论。