Задать вопрос
lavezzi1
@lavezzi1

Как закрывать меню по клику на ссылку внутри него в SPA?

Здравствуйте. Есть SPA на vue.js возник такой вопрос. Есть обычный сайдбар который выкатывается справа по клику на гамбургер на мобильных. Нужен такой behavior – человек кликает на гамбургер меню отктрывается (легко) после того, как он кликает на ссылку, происходит переход на страницу и в этот же момент нужно убирать класс с боди чтобы меню закрылась ( в этом месте как раз проблема). Если сделать по обычному, то есть просто ловить клик внутри сайдбара по ссылку и снимать класс то меню закрывается без transition – просто схлопывается и это наверное из за того, что подгружается контент страницы во время клика на ссылку (не уверен). Так как все таки правильно сделать это?

JQuery подобный код (но не jquery). Сделал так – работает. Но не уверен что это по православному.

$('.sidebar__item').on('click', function() {
            setTimeout(function() {
                if ($('body').hasClass('sidebar--open')) {
                    $('body').removeClass('sidebar--open');
                }
            }, 100);
        })


UPDATE
В общем я нашел логичную закономерность. Нет анимация только в том случае, когда меняется layout, то есть вся страница например с /page1 на /page2 не будет анимации. Анимация есть при переходе например /page1/subpage1 или /page2/subpage2.

Есть решение для этого? Опасно ли юзать setTimeout?
  • Вопрос задан
  • 1011 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Александр Алексеев К ответам на вопрос (4)
if ($('body').hasClass('sidebar--open')) {
       $('body').removeClass('sidebar--open');
 }

явно можно сократить до
$('body.sidebar--open').removeClass('sidebar--open');
Ответ написан
Комментировать