Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Галерея: из коллекции в массив (https://javascript.ru/forum/misc/86075-galereya-iz-kollekcii-v-massiv.html)

seregadushka 02.09.2024 07:49

Галерея: из коллекции в массив
 
коллекция работает, массив -- нет.
Здесь 2 варианта на общих данных (картинки , стили)

Вопрос должен быть простой, т.к. есть рабочий вариант в виде :

Это работает:
<div id="myGallery">
<img src="1.jpg" />
<img src="2.jpg" />
<img src="3.jpg" />
</div>


А это не работает:
<div id="myGallery"></div>
<script src="js/list.js"></script>
<script src="js/show.js"></script>


=== внешние файлы ===
var str = [`<img src="1.jpg"/>`,
		`<img src="2.jpg"/>`,
		`<img src="3.jpg" />`]



function show() {
   var block = [];
   for (let i = 0; i < 3; i++) 
	   block.push(str[i]);
   document.getElementById('myGallery').innerHTML = block.join('');
}
window.addEventListener("load", () => { show() });


я понимаю, что это избитая тема, на форуме много вопросов по этим массивам. По этим вопроса и собрал .
Но в каждом свои особенности. Хорошо бы еще объяснение, почему не работает.

Рабочий пример с голыми <img> прост до предела. Он использует скрипты и получает результат.

Но как только мы переходим в область JS, он сразу перестает понимать другие скрипты. Все разваливается.

Прикладываю пример SpaceGallery.zip

space-work.html -- работает.
index.html -- не работает.
В консоли ошибок нет .
У них все общее, разные только .html , разница выше.

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

Первый пример работает и без доп. строк.
Первый работает последовательно , все ОК.
Второй -- сборка массива, ему последовательность не подходит.
Расскажите, почему :)

ksa 02.09.2024 09:35

seregadushka, зачем, имея массив str, делать еще один массив block?


Цитата:

Сообщение от seregadushka
Это работает:
...
А это не работает:

То, что статичный хтмл отображается нормально - это понятно... В чем выражается "неработоспособность" второго варианта?

Nexus 02.09.2024 11:30

Цитата:

Сообщение от ksa
В чем выражается "неработоспособность" второго варианта?

У него, скорее всего, при заполнении #myGallery через js не инициализируется какой-нибудь слайдер.

seregadushka 02.09.2024 14:35

Цитата:

Сообщение от ksa (Сообщение 556098)
зачем, имея массив str, делать еще один массив block?

потому что этому методу 100 лет в обед.

коллеги , я приложил пример, там только скачать и открыть архив. Там все одинаково , кроме .html.
Да, это простая галерея. Просто смена картинок. Я не прошу сделать ее с нуля.

там в начале у обоих одинаково подключаются скрипты.
space-work.html -- работает и показывает , как все дложно быть. И он заканчивается чистым
<div>...картинки...</div>.
Значит, в этом варианте скриптам не надо помогать. Они видят <div> и все делают как надо.

В index.html скрипты те же , в том же месте. И <div> та же.
<div id="myGallery" class="spacegallery"></div>
<script src="js/list.js"></script>
<script src="js/show.js"></script>


Картинки выводятся -- значит, сборка произошла, show.js запустилась, но не вся -- стрипты стоят.


Это же стандартный метод сборки. На форуме много аналогий. Его цель : внутри show.js регулировать численность картинок, чего в чистом HTML (в оригинале строк <div>... картинки...</div> 26 штук , в вопросе 3 шт) сделаь нельзя. Для этого JS и придумали.

Это же стандартная проблема, когда show.js выводится не в том месте, не в то время .
я не могу понять , куда ее вставить эту show.js -- до <div>...</div> или после. Не работает одинаково.
либо show.js выводится , когда <div>...</div> еще нет, или наоборот.

рони 02.09.2024 16:39

seregadushka,
в строку 7
window.addEventListener("load", () => { show() });


добавить инициализацию галереи

window.addEventListener("load", () => { show();  $('#myGallery').spacegallery({loadingClass: 'loading'});  });

seregadushka 02.09.2024 16:48

Цитата:

Сообщение от рони (Сообщение 556101)
seregadushka,
в строку 7
window.addEventListener("load", () => { show() });


добавить инициализацию галереи

window.addEventListener("load", () => { show();  $('#myGallery').spacegallery({loadingClass: 'loading'});  });

Рони, профессор ! Ты гений.
Я много раз применял эту сборку <div>. И всегда заканчивалось простым слушателем для загрузки show() , и все. У всех все работало. Такой строки не встречал. Спасибо, надо ее запомнить.

Рсскажи, в первом варианте сами просто <div></div> --- и скрипты сами запускаются.

здесь же надо те же самые скрипты еще инициализировать. Что им надо ?

рони 02.09.2024 16:51

Цитата:

Сообщение от seregadushka
Что им надо ?

картинки, нет картинок нет инициализации.

seregadushka 02.09.2024 17:08

рони,
но я же вставлял эту show() и после картинок и перед. Тем более, в стоячем положении картинки есть. Как это все работает

рони 02.09.2024 17:37

Цитата:

Сообщение от seregadushka
но я же вставлял эту show() и после картинок и перед.

???
show как раз и вставляет картинки на страницу, до запуска show никаких картинок нет!!! а раз нет картинок, то не из чего делать галерею. вставили картинки, запустили создание галереи.
для понимания ... создание галереи из layout.js отработало, но картинок не нашло, поэтому после создания картинок на странице, нужно повторно запустить инициализацию после show.

seregadushka 02.09.2024 17:48

рони, конечно, я открыл все эти скрипты и сразу закрыл. Разобраться там невозможно.
но в оригинале, все скрипты загрузились. И во 2 варианте тоже.
далее <div><img>...</img</div> -- и этого достаточно для работы всех скриптов. Работает браузер, все выводит по голому <div>

Во 2 вариант show() все собрала, и далее идет тот же самый <div><img>...</img</div>. После сборки эти <div> одинаковые .
Почему во 2 варианте тот же самый <div> уже показывает те же картинки , но скриптам этого недостаточно ? Их нужно еще подпихнуть, чего не надо в оригинале ?


Часовой пояс GMT +3, время: 07:17.