Я использую график D3 вместе с картой Google. Я хочу, чтобы график переходил каждый раз при изменении масштаба карты. Он отлично работает, если масштаб не меняется быстрее, чем завершилось обновление перехода. Однако двойное нажатие кнопки масштабирования приводит к прерыванию переходов.
Как я могу остановить следующий переход до того, как закончится предыдущий?
Это мой код (это приложение Backbone):
render: function() {
this.renderMap();
},
renderMap: function() {
var that = this;
...
google.maps.event.addListener(that.mapControl, 'zoom_changed', function() {
that.change();
});
},
change: function() {
var that = this;
d3.transition().duration(750).each(function() {
that.redraw();
});
},
redraw: function() {
...
this.redraw = function() {
...
var barUpdate = d3.transition(bar).attr("transform", function(d) {
return "translate(0," + (d.y0 = y(d.State)) + ")";
}).style("fill-opacity", 1);
};
}
1 ответ
Глядя на ваш код, я думаю, что вы могли бы разделить свои переходы, добавив задержку на основе индекса.
.transition()
.duration(750)
.delay(function(d, i){
return i * 750
})
Если вы ищете точный момент окончания перехода, вы можете попробовать добавить .each ("end", listener) к transition (), которое вызовет слушателя в конце перехода. Transitions # Control. Сделать код похожим на этот?
.transition()
.duration(750)
.each("end", that.redraw())
Надеюсь это поможет.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
Note that if the transition is superseded by a later-scheduled transition on a given element, no end event will be dispatched for that element; interrupted transitions do not trigger end events.