2013-06-19 53 views
9

我使用d3.behavior將縮放事件附加到我的SVG,然後使用鼠標滾輪我可以通過平移和縮放來獲得縮放事件,然後使用它來設置元素的transform屬性。D3js:如何清除由d3.zoom事件設置的縮放比例?

看起來zoom.scale值在某個地方是持久的,所以每次使用鼠標滾輪時,它總是包含正確的縮放值,同時考慮到所有以前的縮放事件。這很酷,但我需要一種方法來清除該值,例如重置縮放按鈕。當用戶點擊按鈕時,下次他滾動縮放時,元素將再次從原始大小縮放。

D3在哪裏存儲這個值,我該如何重置它?

UPDATE:
這個問題也有它的另一個方面:如果我編程方式設置「變換」屬性做縮放變換,縮放事件將不會把這些考慮進去。所以,如果我以後使用鼠標滾輪放大縮小,我很麻煩,因爲我可以摧毀原始轉換。因此,我需要一種以編程方式設置縮放事件的「翻譯」和「縮放」值的方式,而不僅僅是重置,無論它存儲在何處。

+1

在d3 google羣組論壇上發表類似問題的人的評論:https://groups.google.com/d/msg/d3-js/-qUd_jcyGTw/ksHIZi7baCsJ – mg1075

回答

12

縮放比例存儲在您的縮放對象中。我猜你有一行代碼,看起來像:

var zoom = d3.behavior.zoom() 

獲得來自該對象的規模很簡單:

zoom.scale() 

要縮小X2:

zoom.scale(zoom.scale()/2) 

翻譯以同樣的方式工作,使用zoom.translate()zoom.translate([x, y])進行設置。

要保持顯示變換與縮放同步,只要確保更新一個,另一個也更新。

+2

https://github.com/ mbostock/d3/wiki/Zoom-Behavior –

+0

這太棒了!有沒有一種方法可以從事件對象中獲取此對象?或者我必須明確定義並將其保存爲var? –

+0

啊沒關係,我想通了,這是d3.event.target對象。感謝您的回答:) –

相關問題