Возможно ли, чтобы выпадающее меню Twitter Bootstrap вышло из строя?

Я пытаюсь получить стандартное меню выпадающего меню на Twitter Bootstrap, чтобы исчезнуть, а не просто появиться. Я попытался добавить классы fade и in, но он не исчезает. Вот моя скрипка http://jsfiddle.net/byronyasgur/5zr4r/10/.

Я пробовал об этом по-другому: например, ответ на этот вопрос, но по какой-то причине у меня возникли проблемы с настройкой триггера выпадающего списка с помощью jquery.

Ответ 1

Играя с этим, похоже, что анимация CSS работает лучше всего.

.open > .dropdown-menu {
  animation-name: slidenavAnimation;
  animation-duration:.2s;
  animation-iteration-count: 1;
  animation-timing-function: ease;
  animation-fill-mode: forwards;

  -webkit-animation-name: slidenavAnimation;
  -webkit-animation-duration:.2s;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-timing-function: ease;
  -webkit-animation-fill-mode: forwards;

  -moz-animation-name: slidenavAnimation;
  -moz-animation-duration:.2s;
  -moz-animation-iteration-count: 1;
  -moz-animation-timing-function: ease;
  -moz-animation-fill-mode: forwards;
}
@keyframes slidenavAnimation {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes slidenavAnimation {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

Вы можете добавить другие свойства CSS, чтобы сделать более сложные анимации. Например, я играл с левым: -30 → влево: 0.

Ответ 2

Я хотел бы представить современный подход, основанный только на CSS:

.dropdown-menu.fade {
  display: block;
  opacity: 0;
  pointer-events: none;
}
.open > .dropdown-menu.fade {
  pointer-events: auto;
  opacity: 1;
}

Это позволяет .fade обрабатывать анимацию перехода, но .open - это то, что контролирует непрозрачность и состояние указателя.

Ответ 3

Возможно, что-то подобное с помощью jQuery:

$(function() {
    $('.dropdown-toggle').click(function() {
        $(this).next('.dropdown-menu').fadeToggle(500);
    });
});​

Вы можете поиграть здесь: http://jsfiddle.net/5zr4r/15/

ОБНОВЛЕНИЕ: Я забыл сказать, что вы должны удалить fade in из ul.

Ответ 4

Я тоже нашел приятное решение:

// Add slideDown animation to dropdown
$('.dropdown').on('show.bs.dropdown', function(e){
  $(this).find('.dropdown-menu').first().stop(true, true).slideDown();
});

// Add slideUp animation to dropdown
$('.dropdown').on('hide.bs.dropdown', function(e){
  $(this).find('.dropdown-menu').first().stop(true, true).slideUp();
});

Пример: http://codepen.io/danielyewright/pen/EvckL

Ответ 5

Небольшая настройка в Jason Featheringham answer, которая работает в Bootstrap 4.

.dropdown-menu.fade {
   display: block;
   opacity: 0;
   pointer-events: none;
}

.show > .dropdown-menu.fade {
   pointer-events: auto;
   opacity: 1;
}

Ответ 6

Вы можете попробовать следующее:

// Add fadeToggle animation to dropdown       
$('.dropdown').on('show.bs.dropdown', function(e) {   
  $(this).find('.dropdown-menu').first().stop(true, true).fadeToggle(500); 
}); 

// Add fadeToggle animation to dropdown 
$('.dropdown').on('hide.bs.dropdown', function(e) { 
  $(this).find('.dropdown-menu').first().stop(true, true).fadeToggle(500); 
});

Он использует существующие функции show.bs.dropdown и hide.bs.dropdown Bootstrap и изменяет эффект выпадающего списка на "затухание" вместо "появляться". Вы также можете изменить fadeToggle() на slideDown(), если вы хотите использовать "слайд". Надеюсь, это поможет.

Вот скрипка: http://jsfiddle.net/ck5c8/