@Nikita_02

Как сделать плавный transition?

Друзья, добрый день!
Прошу вашей помощи, заранее огромное спасибо откликнувшимся! Суть вопроса такова;
При клике на иконку мобильного меню (бургер) .main-menu-btn для данного div'а добавляется класс .active, и выезжает мобильное меню .main-menu с классом .is-visible Выезжает оно с задержкой transition: transform 0.3s linear 0s. При последующем клике классы у .main-menu-btn и .main-menu удаляются, и меню улетает (исчезает), т.е. задержка не срабатывает.

Знаю, что можно реализовать данное через JS:
on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
в чем разница не понимаю, и так и так и эдак не работает, в интернете перерыл кучи кода, сайтов-примеров с демо, под себя адаптировать не могу, т.к. JS не знаю (каюсь), времени изучать нет, делаю сайт для школы...

/** Кнопка меню (бургер) **/
<div class="main-menu-btn visible-xs-inline-block">

/** Мобильное меню **/
<div class="main-menu-wrap">
   <ul class="main-menu">
      <li class="main-menu-item">
            <a href="/programs">Программы</a>
      </li>
      <li class="main-menu-item">
            <a href="/programs">Программы</a>
      </li>
      <li class="main-menu-item">
            <a href="/programs">Программы</a>
      </li>
</ul>
</div>


.responsive .main-menu {
    transition: transform 0.3s linear 0s;
}
.responsive .main-menu.is-visible {
    transform: translate(-100%);
}


$(".main-menu-btn").on("click", function(e) {
		e.preventDefault();
		$(this).toggleClass("active");
		$(".main-menu").toggleClass("is-visible");
		$(".main-menu").on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');
	});
  • Вопрос задан
  • 741 просмотр
Решения вопроса 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Приведите весь код, а лучше ссылку на jsfiddle.net
Что вижу в вашем примере: класс responsive не присвоен ни одному из родительских для main-menu элементов.
$(".main-menu").on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend');

Это что? Какую обработку вы назначаете на эти события?

Если я правильно понял то, что вы хотите сделать, нужно так:
$(".main-menu-btn").on("click", function(e) {
    e.preventDefault();
    $(this).off('click');
    $(this).addClass("active");
    $(".main-menu").addClass("is-visible");
    $(".main-menu").off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend').on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(e){
// и вот тут заново делаем обработчик клика для $(".main-menu-btn")
// но это страх и ужас - нужно выносить из замыкания в отдельные функции
});
  });
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@holfza
.responsive .main-menu {
    transition: transform 0.3s linear 0s;
    transform: translate(0%);
}
.responsive .main-menu.is-visible {
    transform: translate(-100%);
}
Ответ написан
Ваш ответ на вопрос

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

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