Есть такая структура:
<div class='works'>
<h1>Наши работы</h1>
<div class='layout'>
<span class="tile narrow">
<div class='content'>
</span>
<span class="tile wide">
<div class='content'>
</span>
<span class="tile wide">
<div class='content'>
</span>
<span class="tile narrow">
<div class='content'>
</span>
<a class="btn fw">Больше...</a>
</div>
</div>
Блоки tile размечены на flex, narrow = 1/2 wide
Для того, чтобы сохранить соотношение сторон этих блоков, высота высчитывается как layout.width()/3.7. Все это делается таким скриптом:
$('.layout .tile').each(function(){
var tileHeight = $('.layout').width()/3.7
$(this).height(tileHeight)
$(this).children('.content').height(tileHeight - 100 + 'px').width(tileHeight - 100 + 'px')
})
Заодно, в нем прописывается высота и ширина контента.
Чаще всего, все высчитывается корректно, но иногда (как я понял опытным путем) скрипт выполняется до загрузки самих блоков и из высота схлопывается в ноль.
Покопавшись в интернете, нашел обработчик window.onload, который (по идее) должен был помочь, но ничего не поменялось. Этот обработчик ни с чем не конфликтует, остальные функции в нем срабатывают.
Как заставить конкретную функцию ждать подгрузки конкретных блоков?
Либо, как вариант, как по-другому высчитывать высоту блоков относительно ширины родительского?