2017-08-02 44 views
-1

我正在添加使用SVG到Google Map的自定義控件。如何在我的元素已連接到DOM時得到通知

地圖已經加載和顯示我的控制,我需要從svg元搶BBOX。由於我不控制何時將元素連接到DOM,因此我試圖找到一個允許我在回調中完成該工作的事件。

這裏大概是我有:

map = new google.maps.Map(...); 
... 
container = document.createElement("div") 
svg = createAndDrawSVGElement(...); //this returns an svg element 
container.appendChild(svg); 
INSERT_THE_RIGHT_EVENT_HERE(function() { 
    var bbox = svg.getBBox(); 
    ... //bbox will be empty if svg isn't attached 
} 
map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(container); 

我現在的,醜陋的解決方法是一個setTimeout。我想要更可預測的事情。

+1

你」我必須展示你是如何構建和附加你的控制,我。即'createAndDrawSVGElement()'和'addSVGtoContainer()'。通常的模式是,異步執行的函數具有一種機制,您可以在該機制中指定僅在異步操作完成後才執行的回調函數。但要確定這一點,我們需要看到更多的代碼。 – ccprog

+0

@ccprog這些函數已經存在;我沒有向他們展示,因爲他們與問題無關。一個返回'svg'元素,另一個將其追加到'div'。我以不同的方式解決了我的問題,現在我將發佈。 [SVG的GetBBox時隱時現]的 –

+0

複製(https://stackoverflow.com/questions/28282295/getbbox-of-svg-when-hidden) – geocodezip

回答

0

看API後,我會嘗試這一點(雖然文檔並不明確地說,這是否之前或附加的元素之後調用):

var map = new google.maps.Map(...); 
... 
var container = document.createElement("div") 
var svg = createAndDrawSVGElement(...); //this returns an svg element 
container.appendChild(svg); 

var controls = map.controls[google.maps.ControlPosition.RIGHT_BOTTOM]; 
var position = controls.length; 

google.maps.event.addListenerOnce(controls, "insert_at", function(i) { 
    if (i === position) { 
     var bbox = svg.getBBox(); 
     ... //etc 
    } 
} 

controls.insertAt(pos, container); 
相關問題