@ich_heisse_erich

Как исправить ошибку preloader js?

Добрый вечер, не так давно я начал учить JS, и сейчас пытаюсь везде практиковаться.
На данный момент делаю сайт в стиле windows 95 ( так попросил заказчик )
В общем как мы помним в Windows 95 во время загрузки стоит картинка, а после загрузки проигрывается звук. Я написал скрипт этого всего, выглядит он так:
var preload = document.createElement('div');
    preload.className = "preloader";
    if (screen.width > 480) {
      preload.innerHTML = '<img height="100%" width="100%" src="img/preloader.jpg" alt="">';
    } else {
      preload.innerHTML = '<img height="100%" width="100%" src="img/preloader-mobile.jpg" alt="">';
    }
    document.body.appendChild(preload);
    window.addEventListener('load', setTimeout(function () {
      preload.innerHTML = '<audio src="sounds/startsound.mp3" controls autoplay></audio>';
      var audio = document.querySelector("audio");
      audio.volume = 0.3;
      preload.style.display = 'none';
    }, 1000));

Всё работает, НО консоль выдаёт ошибку
Uncaught TypeError: Failed to execute 'addEventListener' on 'EventTarget': The callback provided as parameter 2 is not an object.
at index.html:29

Ссылка на github https://erikstarodubcev.github.io/belyugorisont.gi...
Что я не так сделал? Я искал в гугле, ответа не нашел.
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fi1osof
@Fi1osof
JS fullstack developer
Вероятней всего вот причина:
setTimeout () - это уже выполнение. А надо именно функцию передавать.
Попробуйте обернуть в () => {....}
То есть
window.addEventListener('load', () => {
   setTimeout(function () {
      preload.innerHTML = '<audio src="sounds/startsound.mp3" controls autoplay></audio>';
      var audio = document.querySelector("audio");
      audio.volume = 0.3;
      preload.style.display = 'none';
    }, 1000)
});


То есть, после того, как документ загрузится, у вас вызовится функция, которая запустит setTimeout(...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы