2013-04-10 24 views
2

我在Google Map旁邊使用D3圖形。我希望圖形在地圖縮放變化時進行轉換。如果縮放比轉換完成更新沒有變化得更快,它就可以正常工作。但是,連續兩次單擊縮放會導致轉換失敗。D3.js:直到前一個完成纔開始新的轉換?

如何在上一次轉換完成之前停止下一次轉換?

這是我的代碼(這是一個主幹應用程序):

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); 
     }; 
    } 

回答

3

在你的代碼來看,我認爲你可能能夠通過增加基於索引的延遲來分隔過渡。

.transition() 
    .duration(750) 
    .delay(function(d, i){ 
     return i * 750 
    }) 

如果你正在尋找一個過渡結束的確切時刻,你可以嘗試添加的。每個(「結束」,聽衆)的過渡(),它會調用監聽器在一個過渡的結束。 Transitions#Control。讓代碼看起來像這樣?

.transition() 
    .duration(750) 
    .each("end", that.redraw()) 

希望這會有所幫助。

+0

我喜歡這個想法。我有大約20個事件需要作爲「光標」掃過圖表掃描。我會給它一個鏡頭並檢查出來。 – 2014-05-19 21:17:28

+2

每個人都應該記住文檔中的這個重要注意事項:'請注意,如果轉換被給定元素上稍後計劃的轉換所取代,則不會爲該元素分派結束事件;中斷的轉換不會觸發結束事件。「 – JLewkovich 2014-11-14 03:39:27

相關問題