2010-02-18 4 views
0

J'appelle une fonction JS via ExternalInterface en utilisant Flex qui nécessite les coordonnées absolues X et Y pour créer un menu contextuel. L'application Flex est affichée au centre d'une page HTML, il y a donc un décalage HTML X et Y à considérer. J'ai essayé d'utiliser les fonctions LocalToGlobal et ContentToGlobal, mais celles-ci ne me donnent que les coordonnées X et Y par rapport à l'application Flex. Je ne considère pas le décalage HTML X et Y de l'application Flex au centre de la page ou en variant différentes résolutions d'écran.Flex - Comment obtenir les coordonnées absolues X et Y, y compris le décalage HTML?

Est-ce la meilleure approche pour récupérer le décalage HTML X et Y en utilisant JavaScript? Y at-il une fonction Flex que je peux utiliser qui fournit les coordonnées absolues X et Y basées sur la page HTML?

Merci!

+1

menu déroulant va être en flex ou html? Si elle est en flex, et si flex est déjà au centre de html, pourquoi avez-vous besoin des valeurs x/y de swf? ne pouvez-vous pas utiliser la fonction localtoglobal? – Amarghosh

Répondre

1

Si je vous comprends bien, il semble que:

  • Vous avez un petit Flex App dans le centre d'une page HTML
  • Sur un événement, vous voulez créer un popup HTML (nouveau fenêtre contextuelle du navigateur).
  • Cette fenêtre contextuelle doit être centrée dans la page HTML.

Si cela est correct, vous n'avez pas besoin d'utiliser localToGlobal ou globalToLocal; vous recherchez simplement les limites de la fenêtre du navigateur. Voici une méthode que je suis actuellement en utilisant de placer des articles par rapport aux limites du navigateur (tout cela est javascript):

function getBrowserBounds() 
{ 
     var size = [0, 0]; 
     if (typeof window.innerWidth != "undefined") { 
      size = [window.innerWidth, window.innerHeight]; 
     } 
     else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0) { 
      size = [document.documentElement.clientWidth, document.documentElement.clientHeight]; 
     } 
     else { 
      size = [document.getElementsByTagName("body")[0].clientWidth, document.getElementsByTagName("body")[0].clientHeight]; 
     } 
     var bounds = null; 
     if (navigator.userAgent.indexOf("MSIE") != -1) // Internet Explorer 
      bounds = [window.screenLeft, window.screenTop, size[0], size[1]]; 
     else 
      bounds = [window.screenX, window.screenY, size[0], size[1]]; 
     var width = bounds[0] + (bounds[2]/2); 
     var height = bounds[1] + (bounds[3]/2); 
     return bounds; 
} 

qui renvoie les limites de la fenêtre du navigateur. De là, vous pouvez créer une fenêtre qui est centré dans le navigateur, chaque fois que le navigateur est dans les limites de l'écran d'ordinateur portable/de bureau, en utilisant ceci:

function centerPopup(windowHeight, windowWidth, windowName, windowUri) 
{ 
    var bounds = getBrowserBounds(); 
    var centerWidth = bounds[0] + ((bounds[2] - windowWidth)/2); 
    var centerHeight = bounds[1] + ((bounds[3] - windowHeight)/2); 

    newWindow = window.open(windowUri, windowName, 'resizable=0,width=' + windowWidth + 
     ',height=' + windowHeight + 
     ',left=' + centerWidth + 
     ',top=' + centerHeight); 

    newWindow.focus(); 
    return newWindow.name; 
} 

Laissez-moi savoir si cela fonctionne.

Best, Lance

0

@viatropos Peut-on obtenir fait sans utiliser window.open(). Comme j'ai une application avec la hauteur 50 en haut du navigateur et que je veux ouvrir une pop up au milieu du navigateur .et je veux un pop up donc je n'ai pas d'url à passer aussi

Questions connexes