2009-12-01 8 views
1

J'ai écrit un petit plugin lightbox pour jQuery (oui, il y a plusieurs paquets prêts à l'emploi - malheureusement, le concepteur de ma société ne les aime pas).Calcul dynamique de la hauteur de la div - JQuery/AJAX

J'ai un petit problème - J'utilise .load() pour charger le contenu flash dynamique dans la division lightbox. J'ajoute le div au DOM, préréglant la visibilité à hidden, et en utilisant .outerHeight (true) et .outerWidth (true) pour obtenir les dimensions. Dans Internet Explorer, j'obtiens une hauteur de 61px (marge + 1px).

Assomption: contentContainer est déjà ajouté au corps dom frag

var remote = $(document.createElement("div")); 
remote.css("margin", "30px");  
var loadURL = $(this).attr('href'); 

if(typeof(isImage) == "undefined" || !isImage){ 
    console.log("Loading " + loadURL); 
    contentContainer.append(remote); 
    remote.load(loadURL, function(){     
     contentContainer.css("left", (currWindow.width/2) - (contentContainer.outerWidth(true)/2)) 
      .css("top", document.body.scrollTop + (currWindow.height/2) - (contentContainer.outerHeight(true)/2)); 
     overlay.css("visibility", "visible"); 
     contentContainer.css("visibility", "visible"); 
    }); 
} 

Un div de base avec une hauteur définie explicitement et la largeur est ce qui est en cours de chargement dans la télécommande.

Des suggestions? Je pense que c'est quelque chose de stupide quand j'essaie de calculer la hauteur et la largeur. Il a travaillé avec une image de base mais ...

Josh

+0

quelle version de IE? –

+0

IE8 en fait. Aussi après que j'ai posté, il vaut la peine de mentionner que j'essaie de centrer la div sur l'écran absolument. Fonctionne en FF nativement et fonctionne en IE si j'appelle une alerte d'abord, attendez une demi-seconde, puis cliquez sur OK (probablement le contenu de la requête ajax est entièrement chargé, et IE peut calculer la hauteur). Je ne suis pas sûr où/quand je devrais demander la hauteur si ce n'est pas dans le rappel de fin de chargement. – Josh

Répondre

2

Essayez entourant le contenu du rappel dans un window.setTimeout avec 0 millisecondes. Cela attendra que la pile d'appels en cours se déroule avant l'exécution. Dans mon expérience, cela corrige certains problèmes d'IE avec le calendrier de rappel lorsque le rappel s'exécute après que l'événement du navigateur se déclenche, mais avant que IE ne redessine la fenêtre.

+0

Cette petite astuce a résolu quelques problèmes que j'ai eu avec IE. – Josh

Questions connexes