2010-06-29 5 views
0

Je suis en train de faire les boîtes de dialogue jQuery restent dans leur position par rapport à la taille de la fenêtre, donc par exemple:jQuery en boucle dans les boîtes de dialogue ouvertes pour obtenir/position de mise à jour de chaque

  • Si la largeur de la fenêtre d'origine est 900px et il y a 2 boîtes de dialogue, un à 100100 et un autre à 450.200
  • Lorsque la fenêtre est redimensionnée dire 1200px, la première boîte de dialogue serait 400100 et le second à 750.200

J'ai actuellement ce code de gestion de la fenêtre redimensionner, mais il ne met pas à jour le dialogue positi ons:

jQuery(window).resize(function() { 
    widthCompensation = getBrowserWidths(); 
    jQuery(".dialog-class").each(function() { 
     var myPosition = jQuery(this).dialog("option", "position"); 
     var newLeft = parseInt(myPosition.context.offsetLeft+widthCompensation); 
     var newTop = parseInt(myPosition.context.offsetTop); 
     jQuery(this).dialog("option", "position", [newLeft,newTop]); 
    }); 
}); 

Toute aide serait grandement appréciée!

Code modifié:

function getBrowserWidths() { 
    var standardWidth = 990; 
    var actualWidth = parseInt(jQuery(window).width()); 
    var ret = (actualWidth-standardWidth)/ 2; 
    return(ret); 
} 
var leftPositions = new Array(); 
var widthCompensation = getBrowserWidths(); 

jQuery(window).resize(function() { 
    widthCompensation = getBrowserWidths(); 
    jQuery(".target-class").each(function(i) { 
     var newLeft = leftPositions[i]+widthCompensation; 
     console.log(newLeft); 
     jQuery(this).css({"left": newLeft+"px"}); 
    }); 
}); 

//loop through draggables to get their initial positions 
jQuery(".target-class").each(function(i) { 
    var myPosition = jQuery(this).offset(); 
    leftPositions[i] = myPosition.left; 
}); 
+0

Salut, la fonction getBrowserWidths fonctionne? Est-il possible d'avoir son code? Et juste une chose pour éviter le code de ne pas s'exécuter sur IE, utilisez var widthCompensation = ... sans var, IE est perdu ^^ (pas la seule situation c'est bien ...) –

+0

La fonction getBrowserWidths fonctionne correctement. Le code est: function getBrowserWidths() { \t var standardWidth = 990; \t var actualWidth = parseInt (jQuery (fenêtre) .width()); \t var ret = (largeurWidthWidth standard)/2; \t retour (ret); } J'ai défini la variable widthCompensation plus haut dans le script et j'ai besoin d'y accéder une fois qu'elle a été mise à jour en dehors de la portée de la fonction, donc sans utiliser var dans la fonction. Cela peut être faux, même si je ne suis pas à la hauteur sur les portées de variables JavaScript. – Dan

+0

Je me demandais juste, le problème n'est pas myPosition.context.offsetLeft? Pourquoi ne pas utiliser myPosition.left et myPosition.top? (pas sûr, mais cela m'a semblé plus logique) –

Répondre

0

L'utilisation de ce en chacun, assez travaillé pour moi (si la boîte de dialogue ne parvient pas à l'angle du navigateur

var myPosition = $(this).offset(); 
var newLeft = myPosition.left+widthCompensation; 
var newTop = myPosition.top;  
$(this).dialog("option", "position", [newLeft,newTop]); 

Hope it helps;.)

Pour chacun, vous pouvez utiliser l'indice (ici i),

var newLeft = new Array(); 
var newTop = new Array(); 
$(".dialog-class").each(function(i) { 
    var myPosition = $(this).offset(); 
    var newLeft[i] = myPosition.left+widthCompensation; 
    var newTop[i] = myPosition.top; 
    $(this).dialog("option", "position", [newLeft[i],newTop[i]]); 
}); 

N'a pas testé donc pas sûr à 100%, mais voici l'idée.

+0

merci, en utilisant cela comme base, j'ai réussi à obtenir les positions à mettre à jour sur le redimensionnement bien que je dois stocker leur position d'origine quelque part car cela se termine par incrémentation exponentielle des positions gauche et supérieure (car il ajoute toujours le décalage à sa position actuelle, il faut ajouter le décalage aux positions individuelles de départ de la boîte de dialogue). Est-il possible d'attribuer une variable à chaque instance? – Dan

+0

Il y a une manière de merde à laquelle je pense, je ne sais pas s'il y en a une, je suppose, mais je ne suis pas spécialiste. Je suis en train d'éditer ma réponse;) –

+0

La solution était-elle correcte? –