2010-07-17 4 views
7

Sto scrivendo un estensione per Firefox. Sto cercando di limitarlo solo a XUL + Javascript (senza XPCOM). Quando ricevo un evento mouseover per un elemento HTML, ho bisogno di ottenere la sua casella di delimitazione nelle finestre sistema di coordinate (che è il built-in XUL documento browser.xul).Qual è il modo corretto per ottenere la bounding box per gli elementi HTML relativi alla finestra?

L'ovvio punto di partenza è quello di mettere qualcosa di simile nel gestore eventi mouseover:

var rect = e.target.getBoundingClientRect(); 

Che è grande, ma che mi dà il rect nel sistema di coordinate del documento HTML, che è relativo al angolo in alto a sinistra dell'area di disegno HTML. Voglio visualizzare un elemento xul: panel usando panel.openPopup() vicino a questa immagine (ma non usando uno dei predefiniti popup positions), quindi ho bisogno di tradurre le coordinate.

Ho provato a fare quanto segue (nella dom XUL) per ottenere l'offset di fare la traduzione, e funziona per alcuni siti, ma non tutti, e non sembra prendere in considerazione la traduzione x necessaria per i sidebar.

var appcontent = document.getElementById("appcontent"); 
if (appcontent) { 
    chromeOffsetX = r.left; 
    chromeOffsetY = r.top; 
} 

Allora, qual è il modo migliore per affrontare questo?

Nota: per le estensioni di IE avrei usato (e ho usato) IDisplayServices::TransformRect() -Esiste qualcosa di simile per Firefox?

Ora con taglie!

risposta

0

Risulta sempre la posizione è irrilevante, perché è possibile posizionare gli elementi relativi all'elemento utilizzando qualcosa di simile:

hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false); 
0

This question ha un codice che risolve xey di un elemento relativo alla finestra visibile. Non sono sicuro che risponda alla tua domanda.