Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выдает TypeError, но при этом работает штатно. (https://javascript.ru/forum/events/80634-vydaet-typeerror-no-pri-ehtom-rabotaet-shtatno.html)

рони 07.07.2020 12:44

Vahan60,
если картинок немного, загрузите их все в строке ноль.
читать preloading images with JavaScript

voraa 07.07.2020 14:58

Использовать Promise надо
Определяем функцию, возвращающую Promise, разрешающийся, когда картинка загрузится (ну или ошибка, т.к. мы их все равно не обрабатываем)

const loadimg = (img, src) => {
	return new Promise (res => {
		img.onload = img.onerror = () => res()
		img.src = src
	})
}


Затем ждем, когда все картинки загрузятся и потом показываем диалог
Вместо строк 4-8
Promise.allSetted([...img].map((im, j) => loadimg(im, `cartoons/${inset[activeUnit][j]}.png`)))
   .then(() => dial.show())

Vahan60 08.07.2020 09:26

Получилось.

for (let i = 0; i < alphabet.length; i++){
      unit[i].addEventListener("click", function( ) {
	  activeUnit = i;   
      for (let j = 0; j < img.length; j++) {
	  img[j].src = "cartoons/".concat(inset[activeUnit][j].concat(".png"))
          };	  
	   }) 
   };  

for (let i = 0; i < alphabet.length; i++){
      unit[i].addEventListener("click", function( ) {
	     dial.show()  
	   }) 
   };


Всем огромное спасибо!:thanks:

Vahan60 08.07.2020 09:30

Как меня достали эти алерты:

"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его рони."

"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его voraa."

:-/

Невозможно поблагодарить Консультантов по форумному.

Благодарю по человечески - еще раз огромное спасибо.

voraa 08.07.2020 12:22

Цитата:

Сообщение от Vahan60
Получилось.

Осталось проверить это на более медленном соединении (например, 3G) и очищая кэш браузера.
Не думаю, что это что то дает.

Vahan60 08.07.2020 19:27

Кэш очистил. Работает нормально. С 3ж не знаю как быть. В случае чего к строкам 10-12 можно прикрутить setTameOut.


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