@steklovatnik

Как в js дождаться выполнения scroll и после этого запустить следующую функцию?

Пожалуйста, не надо примеров с setTimeout))
При клике на ссылку экран мотается до якоря через window.scroll, насколько я понимаю, он работает асинхронно и мне нужно дождаться конкретно его завершения. Про промисы знаю, но не понимаю, как мне их тут прикрепить, мне же нечего вернуть в resolve.

Код:

menuLinks.forEach((link) => {
    link.onclick = (e) => {
      anchArr.forEach((anch) => {
        const position = elemPos(anch.elem);
        anch.top = position.elemTop;
        anch.bottom = position.elemBottom;
      });
        scrollControl(false); // блочу отслеживание прокрутки окна
        scrollTo(link.dataset.link); //перемещаюсь к якорю (используя  window.scroll)
        linkSwitch(link.dataset.link); // переключаю активную менюху
        scrollControl(); // запускаю отслеживание прокрутки снова, что бы меню переключались при скролле над якорями
   };
  });
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
Пожалуйста, не надо примеров с setTimeout))

никто в здравом уме это вам и не посоветовал бы

Насколько я знаю, scrollTo никак не оповещает о завершении своего выполнения. Поэтому можно поступить примерно так.
Создать функцию-обертку, которая будет принимать коллбэк. Внутри вычислять, прокрутился ли экран до нужного блока, а затем вызвать переданный коллбэк.

Update. Нашел вам вариант еще лучше. Ждать, пока событие scroll перестанет срабатывать, после чего выполнять коллбэк
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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