JQuery цикл через открытые диалоги, чтобы получить / обновить позицию каждого - PullRequest
0 голосов
/ 29 июня 2010

Я пытаюсь сделать так, чтобы диалоги jQuery оставались на своих местах относительно размера окна, например:

  • Если исходная ширина области просмотра составляет 900 пикселей, и есть 2 диалога, один из которых на 100 100и другой при 450 200
  • Когда размер окна изменяется на 1200 пикселей, первый диалог будет 400 100, а второй - 750 200

В настоящее время у меня есть этот код, обрабатывающий изменение размера окна, ноон не обновляет позиции диалога:

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]);
    });
});

Любая помощь будет принята с благодарностью!

Модифицированный код:

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;
});

1 Ответ

0 голосов
/ 29 июня 2010

Используя это в каждом из них, это вполне сработало для меня (если диалог не достигает угла браузера.

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

Надеюсь, это поможет;)

Для каждого вы можете использовать индекс (здесь я),

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]]);
});

Не проверял, так что не уверен на 100%, но вот идея.

...