@Vasya-prijevalskij

Как сделать коллбэк функцию?

Всем привет. Не могу разобраться как работают коллбэк функции. Пытаюсь реализовать ее на реальном примере, но ничего не выходит.
Подскажите плз, как это работает. Допустим у меня на сайте есть прелоадер, который, очевидно грузиться в самом начале:
let images = document.images,
      imagesTotalCount = images.length,
      imagesLoadedCount = 0;
    
            for(let i = 0; i < imagesTotalCount; i++) {
                imageClone = new Image();
                imageClone.onload = imageLoaded;
                imageClone.onerror = imageLoaded;
                imageClone.src = images[i].src;
            }
    
            function imageLoaded() {
                imagesLoadedCount++;
                if(imagesLoadedCount >= imagesTotalCount) {
                    setTimeout (function () {
                        if(!preloader.classList.contains('done')) {
                            preloader.classList.add('done');
                        }
                    }, 1000);
                }
            }

А также есть вебпак модули, которые необходимо запустить, после того, как скроется прелоадер, т.к. в модулях анимационный скрипт лежит, который во время показа прелоадера запускаться не должен:
let vars = require('./modules/vars'),
 anim = require('./modules/anim'),
 slider = require('./modules/slider');

 vars();
 anim();
 slider();


Как мне используя коллбэк функцию, запустить сначала мой преоадер, а затем как выполнится условие в прелоадере if(!preloader.classList.contains('done')) запустить модули? Меня интересует как можно это сделать исключительно коллбэком, потому что я не до конца понимаю, как они работают. Понимаю, что вариантов есть масса для выполнения моей задачи. Но меня пока интересует только коллбэк.
Заранее большое спасибо за помощь!
  • Вопрос задан
  • 70 просмотров
Решения вопроса 3
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
function try_callback(a, b, callback) {
	return callback(a, b)
}

function plus(a, b) {
	return a + b
}

console.log(try_callback(1, 1, plus))
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Колбэки и так уже используются: вот тут imageClone.onload = imageLoaded;

Некую функцию (колбэк == "callback" == "перезвоните сюда позже") передали, чтобы её вызвали позже. Когда наступит событие onLoad у этого клона картинки.

Как-то так попробуйте:
function nextActions() {
  vars();
  anim();
  slider();
}

// ... 

// внутри колбэка imageLoaded:
if (!preloader.classList.contains('done')) {
  preloader.classList.add('done');
  nextActions(); // запустить следующие анимации
}
Ответ написан
Комментировать
NikFaraday
@NikFaraday
Student full-stack Developer
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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