2015-12-15 4 views
2

Я пытаюсь добавить атрибут data-size моему родителю div.jQuery каждый слишком быстро

Вот мой код:

var width, height; 
$(".galerie img").each(function() { 
    width = this.naturalWidth; 
    height = this.naturalHeight; 
    $(this).parent().attr('data-size', width+'x'+height); 
}); 

У меня есть около 40 изображений на 1 странице. На этом пути не каждый мой div получает «размер данных». Иногда только 1/2 из них, иногда 1/3 из них или только 5 из них. Как я могу это исправить?

+1

вы используете это в document.ready, значит вы ждете, пока DOM получает ready – Farhan

+0

@Farhan У меня это в $ (function() {...}); –

+10

Если вы считаете, что '$ .each' быстро, вы должны увидеть цикл' for' –

ответ

3

в window.load. это потому, что не каждый изображения загружаются должным образом перед каждой функции выстреливает

$(window).on("load", function() { 
var width, height; 
    $(document).ready(function(){ 
     $(".galerie img").each(function() { 
      width = this.naturalWidth; 
      height = this.naturalHeight; 
      $(this).parent().attr('data-size', width+'x'+height); 
     }); 
    }); 
}); 
+0

window onload не может гарантировать загрузку всех изображений –

+0

@ RokoC.Buljan Я видел ваш ответ, и я ooks довольно хорошо для меня. Я использовал код моего ответа в одном из моих проектов, и он тоже там хорош. но ваш ответ более логичен. – Farhan

+0

для дополнительной справки http://stackoverflow.com/questions/544993/official-way-to-ask-jquery-wait-for-all-images-to-load-before-executing-somethin – Farhan

0

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

попытаться проверить его с чем-то вроде этого:

if (typeof img.naturalWidth !== "undefined" && img.naturalWidth === 0) { 

или использовать document.ready imagesLoaded javascript library.

1

Используйте new Image() и ждать его onload

var width, 
    height; 
$(".galerie img").each(function() { 
    var $that = $(this); 
    var img = new Image(); 
    img.onload = function(){ 
    width = this.naturalWidth; 
    height = this.naturalHeight; 
    $that.parent().attr('data-size', width+'x'+height); 
    }); 
    img.src = this.src; 
}); 
Смежные вопросы