[英]Update drag/scroll origin after an update of the data with transition in D3
我在圖表上進行拖動,縮放和更新。 這在大多數情況下有效,但是,添加新數據后,拖動位置不會更新。
重現步驟:
所以我想,在添加新數據時,我必須以某種方式更新拖動原點。 但是如何? 到目前為止,我找不到任何示例。 我還查看了D3拖動功能的代碼 ,但對我來說仍然不清楚。 縮放也會發生同樣的事情,我想那是同樣的問題。
可以在這里查看代碼和演示: http : //jsbin.com/irixag/1/edit
編輯:如果不清楚我的意思,請告訴我,以便我重新表述這個問題。
好的,我一直在仔細檢查您的代碼和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
, x1
和translate
。 x1
是對當前值的參考x
你傳遞的變量, x0
是復制的值x
在最初傳入的。 translate
是所有阻力+滴合並的總翻譯。
現在,方便地調用zoom.x(x)
重置所有這三個變量,這意味着轉換將僅針對當前原點進行匯總,並且原點將反映您的移動窗口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.