2013-03-04 41 views
0

我使用拖動,縮放和更新工作在圖表上。然而,在添加新數據後,這種方式通常起作用,拖動位置不會更新。更新D3中的數據更新後更新拖動/滾動原點

重現步驟:

  • 看到演示
  • 等待幾秒鐘,讓一些數據添加到圖表
  • 然後嘗試圖表拖動到左側或右側
  • 圖將推回到開始,從這一點拖動作品的方式,它應該

所以我想,當添加n新聞數據,我不知何故必須更新拖動的起源。但是如何?到目前爲止,我無法找到任何這樣的例子。我也看了一下code of the dragging functionality of D3,但還是不清楚。同樣的事情發生在縮放,我想這是同樣的問題。

代碼和演示可以在這裏看到: http://jsbin.com/irixag/1/edit

編輯:如果並不清楚我的意思,請告訴我,讓我可以重新表述的問題。

回答

1

好的,我一直在瀏覽你的代碼和d3.js源代碼,我注意到了一些事情。

首先,我的解決方案的要點是增加

function update() { 
    ... 
    if (shiftRight) { 
     zoom.x(x); // You're missing this line 
     ... 
    } 
    ... 
} 

這裏的原因:

要初始化使用d3.behavior.zoom()對象上調用.x(x)水平拖放。這看起來很好,除了這個拖動&拖放處理程序不是爲不同的來源而設計的。

基本上,當您撥打d3.behavior.zoom().x(x)時,您現在聲明值爲x是原點。現在,d3.js存儲這個值,所以即使你在一個動畫循環中將窗口向右移動,拖動&仍然會遵循原始原點。

d3.behavior.zoom源中有三個感興趣的變量,x0,x1translatex1是您通過的x變量的當前值的參考。x0是您最初傳入時的複製值xtranslate是所有拖放組合的彙總轉換。

現在,方便地呼叫zoom.x(x)將重置所有這三個變量,這意味着翻譯只會與當前原點彙總,並且原點會反映您的移位窗口。

+0

非常感謝,這絕對有效:) – str 2013-03-11 12:02:26