Скрипт фотоколлажа не корректно отображается на сайте
Стояла задача для своего фото - сайта сделать вывод картинок по типу коллажа. В сети нарыл простой скрипт, но он и масса других вариантов сталкивают меня с одной проблемой.
Картинки "растягиваются" и не сохраняют своих размеров. Если обновить страницу все встает на свои места. Проблема появляется время от времени, не могу разобраться в чем беда, вот сам скрипт, посмотрите, пожалуйста, в чем может быть причина. HTML: <div id="collage" class="clear"><img scr="pics.jpg" /></div> Стили: #collage {width: 717px;} #collage img {display: block; float: left;} .clear:before, .clear:after {display: table; content: ""; line-height: 0;} .clear:after {clear: both;} Скрипт: <script type="text/javascript"> var collage = document.getElementById('collage'); var images = collage.getElementsByTagName('img'); //Маленький набор опций: averageRowHeight - примерная высота строки; gap - отступы между картинками; var options = {averageRowHeight: 300, gap: 7}; var widths = [], rows = [], rowNumber = 0, index = 0, k = 0; //Записываем в массив ширину каждой картинки при одинаковой высоте for(var i = 0; i < images.length; i++){ widths.push(Math.round(images[i].width / images[i].height * options.averageRowHeight)); } //Функция суммы элементов массива Array.prototype.sum = function(){ return this.reduce( function(prev,current){ return +current + prev; }, 0); } //Разбиение оизображений на строки обичным деление общей ширины всех картинок на ширину контейнера while(rowNumber < Math.ceil(widths.sum() / collage.clientWidth)){ rows[rowNumber] = []; //Как только общая ширина картинок превысила ширину контейнера переходим на следующую строку while(index < widths.length && rows[rowNumber].sum()+(rows[rowNumber].length * options.gap) < collage.clientWidth + options.gap){ rows[rowNumber].push(widths[index]); index++; //Если на последнюю строку осталось одно изображение, то дописываем его в "предпоследнюю" if(index == widths.length - 1){ rows[rowNumber].push(widths[index]); rowNumber++; break; } } rowNumber++; } index = 0; //Непосредственно изменение масштаба картинок (пропорционально, без обрезания изображений) for(var i = 0; i < rows.length; i++){ for(var j = 0; j < rows[i].length; j++){ // Если ширина строки больше/меньше ширины контейнера - соответственно // уменьшаем/увеличиваем до ширины контейнера с учетем отступов между картинками k = (collage.clientWidth - ((rows[i].length - 1) * options.gap)) / rows[i].sum(); images[index].style.width = rows[i][j] * k + 'px'; images[index].style.height = k * options.averageRowHeight + 'px'; if(j < rows[i].length - 1) images[index].style.marginRight = options.gap + 'px'; if(i < rows.length - 1) images[index].style.marginBottom = options.gap + 'px'; index++; } } </script> |
river77,
скрипто после загрузки картинок работает? если нет то откуда ему размеры брать? |
Да, после добавления картинок на сайт все работает. А вот через время начинает выеживаться.
|
Часовой пояс GMT +3, время: 11:41. |