停止动画并开始新的动画
我正在构建包含每天每15分钟数据的可视化,因此我根据该更新了viz。停止动画并开始新的动画
我有两个按钮,一个开始一个随机日,即另一个停止它,并开始另一个随机日即viz。
问题是,当我点击开始的另一天按钮,可视化开始更新信息真的很快,似乎前一个计时器仍在继续。我试图找到解决方法,但没有找到解决办法。
HTML按钮:
<input name="updateButton" type="button"
value="Another day"
onclick="playAnimation(500)" />
<input name="updateButton"
type="button"
value="Start"
onclick="playAnimation(500)" />
动画d3js代码:
function playAnimation(speed) { var interval_speed = speed;
var dates = getAllDays('04/01/2016', '07/31/2016');
random_day = dates[Math.floor(Math.random() * dates.length)];
var fname = 'mapped_molinetes_agg_per15_' + random_day[0] + '.csv';
d3.csv(fname, function(molinetes)
{
var timeIntervals = getUniqueValuesArray(molinetes, 'DESDE'); //TODO: sort?
var timeout;
var period = timeIntervals.shift();
function timer() {
var filtered_molinetes = molinetes.filter(function(d){
return d.DESDE === period;
});
update(filtered_molinetes, period, random_day);
period = timeIntervals.shift();
if (period){
timeout = setTimeout(timer, interval_speed);
}
}
stopAnimation(timer);
timeout = setTimeout(timer, interval_speed);
});
}
回答:
我建议你设置一个新的前清除超时,请参阅clearTimeout on MDN
的问题是,一旦你触发异步超时调用,你永远不会阻止它们。他们继续,直到没有period
左侧。
看待这个问题:
timeout = window.setTimeout(() => console.log('async call'), 1000) timeout = window.setTimeout(() => console.log('I am still faster'), 500)
当您选择一个新的日期,把你的timeout
参考,并window.clearTimeout(timeout)
停止。
以上是 停止动画并开始新的动画 的全部内容, 来源链接: utcz.com/qa/266734.html