Итак, я написал код для равномерного распределения изображений в горизонтальном div, сохраняя при этом их высоты одинаковыми, и, похоже, он работает хорошо, за исключением того, что он изменяет размер первого экземпляра класс горизонтально, а затем останавливается. Если я снова запустил код вручную в консоли инспектора хрома, он изменит размер следующего, но не на загрузку страницы.jQuery каждый цикл останавливается после первого экземпляра класса
JS выглядит следующим образом:
$('.horizontal').each(function(i, div){
var heights = [];
var sum = 0;
var count = 0;
$(div).find('img').each(function(j, img){
heights.push($(img).get(0).naturalWidth/$(img).get(0).naturalHeight);
});
$.each(heights,function(){sum+=parseFloat(this) || 0;});
$(div).find('img').each(function(k, img){
$(img).css('width', heights[count] * (100/sum) + "%");
count += 1;
});
});
Вот является JSFiddle на основе того, что было любезно предоставлено lshettyl с моим кодом (игнорировать странную HTML скобку, они просто исправить пробельный вопрос) http://jsfiddle.net/rck79c1L/1/
Хорошо, так что это работает, и, как отмечено в комментарии, проблема заключается не в том, чтобы каждый из них не зацикливался, а неправильно искажал естественную ширину/высоту изображений.
И, кажется, были зафиксированы изменения
$(document).ready(function()
в
$(window).load(function()
'$ .each (высоты, функция (индекс, val) {sum + = parseFloat (val) || 0;});'? – Tushar
почему высота [k-1], а не высоты [k] в вашем последнем каждом? – gbalduzzi
Проверьте каждую собранную вами коллекцию: 'console.log ($ ('. Horizontal'). Length)', 'console.log ($ (div) .find ('img'). Length)', 'console .log (heights.length) 'и' console.log ($ (div) .find ('img')) '- Это все, что вы ожидаете? –