I ask you to help understand the error that occurs when working with the collage photo script described in HabrΓ© ( https://habrahabr.ru/sandbox/78613/ )
var collage = document.getElementById('collage'); var images = collage.getElementsByTagName('img'); //ΠΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ: averageRowHeight - ΠΏΡΠΈΠΌΠ΅ΡΠ½Π°Ρ Π²ΡΡΠΎΡΠ° ΡΡΡΠΎΠΊΠΈ; gap - ΠΎΡΡΡΡΠΏΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ; var options = {averageRowHeight: 255, gap: 3}; 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; //ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ (ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π±Π΅Π· ΠΎΠ±ΡΠ΅Π·Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ) console.log(rows); console.log(rows.length); 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++; } } In the Safari browser under mac (possibly in some other), the error undefined is not an object (evaluating 'rows[i].length') on the drain 41
Because of it, Safari blocks the loading of the entire page and the execution of other scripts on it.
HTML:
<div id="collage" class="clear"> <a href="/raspoznavaniye-gribov/16290/668ee69f0ad038bbecd791d4c66f0459.jpg" title="480px x 640px" data-gallery=""> <img src="/raspoznavaniye-gribov/16290/668ee69f0ad038bbecd791d4c66f0459.jpg" width="480" height="640"> </a> <a href="/raspoznavaniye-gribov/16290/89c9f637dfe608915c0b40fe0b022246.jpg" title="640px x 480px" data-gallery=""> <img src="/raspoznavaniye-gribov/16290/89c9f637dfe608915c0b40fe0b022246.jpg" width="640" height="480"> </a> <a href="/raspoznavaniye-gribov/16290/e2da464b450dd4942d15df4d6d5dc0b2.jpg" title="640px x 480px" data-gallery=""> <img src="/raspoznavaniye-gribov/16290/e2da464b450dd4942d15df4d6d5dc0b2.jpg" width="640" height="480"> </a> </div> 
whilemissed the assignment of some elements of therowsarray due to errors in the logic of therowNumber++;callsrowNumber++;. - Igorconsole.log(rows);before doublefor- Igor