Sadyrbaev
@Sadyrbaev
https://sadyrbaev.ru/

Как сделать выполнение функции только после выполнения предыдущей функции?

Есть такой код

let player = document.querySelector('#player');

player.onclick = function () {

    let playermenu = document.createElement('playermenu');

    playermenu.id = "playermenu";
    playermenu.innerHTML = "Преместить";

    player.after(playermenu);


    playermenu.onclick = function () {
        
        playermenu.remove();

        let map = document.querySelector('#map')

        map.onclick = function (event) {

            let target = event.target;

                target.before(player);

            }
    }
}


Суть его в следующем:

1. Я нажимаю на игрока
2. Появляется меню игрока - кнопка "переместить"
3. Я нажимаю на кнопку "переместить"
4. Потом нажимаю на элемент игровой карты
5. Игрок перемещается в этот элемент с помощью .before
6. После этого момента функция по клику map.onclick не должна срабатывать пока не нажата кнопка "переместить" т.е. пока не выполнены первые три пункта.

Я не пойму как реализовать 6 пункт, map.onclick срабатывает всегда после первого срабатывания, даже без последовательности предыдущих нажатий. Я только изучаю js. Подскажите.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Так происходит потому, что после перемещения обработчик клика с map не удаляется, он продолжает работать.

Вам нужно или удалять обработчик, или добавить флаг перемещения, менять его после кнопки "переместить" и проверять при клике по map.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Wacdis
Architect
Читайте async и await в JS
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Сделайте какой-то буфер, переменную.

При нажатии на "Переместить" в неё помещать игрока. Или просто true.
При нажатии на карту смотреть, есть ли что в этом буфере. Если есть - его и помещаем на карту. И очищаем буфер.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Санкт-Петербург
от 160 000 до 220 000 ₽
28 февр. 2021, в 19:43
2000 руб./за проект
28 февр. 2021, в 19:34
3000 руб./за проект
28 февр. 2021, в 19:28
50000 руб./за проект