2015-05-18 4 views
0

Я делаю вызов AJAX, заменяющий DIV:Ожидание изображения для загрузки после замены DIV

$.post(url, function(data) 
{ 
    $('#product_list').first().replaceWith(data.products); 
}); 

Моя проблема заключается в том, что изображения имеют ширину 100% и авто высоты. Это означает, что я должен дождаться загрузки изображений до того, как я запустил изотоп, чтобы исправить макет для кладки.

$('#product_list').isotope({ itemSelector: '.product'}); 

Когда я с заменой ReplaceWith() не будет выстрелить $(window).load() после загрузки изображения, так что я не могу понять, как это сделать.

Я знаю, что это не лучшее решение, так как это вызовет видимый переход к пользователю. Лучшее решение для меня - установить высоту изображения на фиксированную высоту, но я использую адаптивную загрузочную сетку, поэтому я не могу все равно сделать это, так как мне нужно, чтобы изображение соответствовало 100% ширины его контейнера для поддержания дизайна.

Я не могу думать о моей проблеме вокруг этой проблемы. Я не знаю, как вызвать событие после определения высоты каждого изображения.

+0

Возможно, вам не нужно знать высоту. Просто используйте заданный тайм-аут с разумным количеством времени. – devconcept

+0

Пробовал это, и он не работает последовательно. – Guerrilla

+0

Вы можете использовать плагин jQuery [imagesLoaded] (http://imagesloaded.desandro.com/). –

ответ

0

Вы можете создать объект JS img и использовать событие onload этого изображения, чтобы запустить собственный код javascript, который выполняет некоторую бухгалтерию, и когда все изображения уволят вас, вы запускаете свое событие загрузки.

var $imgs = $('img'), total = $imgs.length, sum = 0; 
$imgs.each(function(){ 
    var img = new Image(); 
    img.src = $(this).attr('src'); 
    img.onload = function() { 
     sum++; 
     if (sum === total) { 
      // all images have loaded, so you can fire your event. 
     } 
    } 
}); 
+0

Действительно хорошая идея! Это заставляет меня задуматься, вы думаете, что отключение метода изотопа() после загрузки каждого изображения будет слишком накладным? Это может сделать загрузку более естественной, чем переустановка всего в конце за один раз, но я не хочу убивать медленные устройства. – Guerrilla

+0

Зависит от количества изображений и скорости их загрузки подряд. Думаю, я просто попробую и посмотрю, как хорошо это исполнилось. Особенно мобильные и старые версии IE, поскольку они являются самыми медленными из браузеров. Вы также можете запускать 'setInterval' каждую секунду, которая пересчитывает страницу и удаляет ее, когда загружаются все изображения. Это не вызовет оплату после каждого загруженного изображения, но все равно даст вам экран обновлений каждую секунду или около того. В функции setInterval вы даже можете проверить, загружены ли какие-либо изображения со времени последнего вызова, и если ничего не изменилось, пропустите переплавку. – koenpeters

+0

Да, хорошая идея. Я буду играть с ним. – Guerrilla