Как реализовать «ожидание» события?

Суть вопроса: есть например несколько слов которые нужно по очереди прочесть, разобрать и собрать.

1) Прочесть - это сделать эффект чтения (в интервале выделяю по очереди символы слова например: МАКсим)
2) Разобрать - символы слова разлетаются рандомно
3) Собрать - перетащить все буквы на их позицию
4) после этого проделать все с остальными словами так же

Подскажите мне как сделать эффект ожидания события сбора слова ?
То есть как мне перейти к другому слову и как код должен понимать когда это нужно сделать ?
В какую сторону мне копать ?

P.S. Сейчас все сделано через интервалы и рекурсивные вызови функции с таймаутом, но получается "макаронный" код, который сложно поддерживать. Интересует именно архитектура или алгоритм который упростить расширение возможностей системы и как то упорядочит все это дело.
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
События. Когда буква встаёт на место, она запускает событие. Слушатель этого события должен проверить, правильно ли собрано всё слово, и если да – перейти к следующему.

Вероятно, вы ещё сделаете минимальную анимацию ликования по поводу очередного собранного слова, чтобы в игре был какой-то ритм и не было суеты.

Для слов – вести какой-то счётчик. Удобно задавать предложения просто текстовой строкой, бить её на слова по пробелу, затем работать с каждым словом по очереди, обновляя указатель на «текущее» слово.
Ответ написан
Ivanq
@Ivanq
Знаю php, js, html, css
У вас будут промисы:
var prom = new Promise.resolve();
words.forEach(v => {
    prom = prom.then(() => {
        return myCoolAnimation(v);
    });
});

function myCoolAnimation(v) {
    return new Promise((resolve, reject) => {
        // Делаем все
        el.onclick = () => { // пример, у Вас будет другое событие
            // Доделали
            resolve();
        };
    });
}


UPD Обновил ответ
Ответ написан
Ваш ответ на вопрос

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

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