Изменить размер контейнера изображения на кратные значения (при загрузке, изменении ориентации и изменении размера) - PullRequest
2 голосов
/ 10 ноября 2011

Мне нужно улучшить скрипт jquery, который привязывает высоту контейнеров изображений к базовой сетке.Я хочу, чтобы он работал во время изменения размера окна.

До сих пор я применил следующее к контейнерам изображений, для которых переполнение установлено как скрытое.Некоторые из них были вдохновлены вопросами, задаваемыми здесь и здесь .

/* Updates height on $(window).load(function(){}); */
$(window).load(function(){

    /* Adjust media container heights and image margins */
    function containerHeight(){
        var targetContainer = 'div.media';
        $(targetContainer).each(function(){
            var targetHeight = Math.round($(this).height() / 20) * 20 - 8;
            if($(this).height() < targetHeight){
                var newHeight = targetHeight - 20;
            }else{
                var newHeight = targetHeight;
            }
            $(this).css({
                'height': newHeight
            });
        });
        $(targetContainer).children('img').each(function(){
            $(this).css({
                'margin-top': Math.round(($(this).parent(targetContainer).height() - $(this).height()) / 2 )
            });
        });
    }
    containerHeight();
    /* Does not update height on $(window).bind('resize', function(){}); with <body class="full"> */
    $(window).bind('resize', function(){
        containerHeight();
    });

});

Однако мой pastie в http://pastie.org/2846491 работает только для фиксированной шириныконтейнеры.

Мне нужно выполнить эту работу для ширины / высоты контейнера для жидкости, во время / после изменения размера окна и подвижной ориентации: изменения портрета / пейзажа, при этом все сохранится на базовой сетке.

Любойуказатели на то, как я должен подходить к этому?Пожалуйста, помогите!

1 Ответ

0 голосов
/ 25 ноября 2011

У меня недавно была эта проблема, и я нашел решение.Не самое элегантное / эффективное решение, но, безусловно, работоспособное:

var fontSize = 20;
var lineHeight = 28;

$(window).resize(function() {
    $('img').each(function() {
        var heightDif = $(this).outerHeight();
        $(this).css('margin-bottom', fontSize + heightDif % lineHeight);
    });
});
$('img').load(function() { $(window).resize(); });

Код срабатывает при изменении размера окна и вычисляет разницу между высотой изображения и следующей наименьшей базовой линией.Затем он добавляет разницу к нижнему полю.Вначале событие запускается при загрузке img (здесь есть возможность повысить эффективность).

Надеюсь, это поможет;если у вас есть какие-либо улучшения, которые могли бы сделать его лучше, я хотел бы знать, чтобы я мог реализовать их в своем коде!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...