2012-12-11 13 views
10

Próbuję uzyskać standardowe menu rozwijane na pasku nawigacyjnym na Bootstrap na Twitterze, aby zaniknąć, zamiast tylko się pojawić. Próbowałem dodać klasy fade i in, ale nie wydaje się zanikać. Oto moje skrzypce http://jsfiddle.net/byronyasgur/5zr4r/10/.Czy można rozwinąć menu rozwijane na Bootstrap na Twitterze?

Próbowałem już o tym rozmawiać w inny sposób - np. Odpowiedź na this question, ale z jakiegoś powodu mam problem z wyzwoleniem spustu z jquery.

Odpowiedz

25

Zabawa z tym, wygląda na to, że animacje CSS działają najlepiej.

.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; 
    } 
} 

Możesz dodać inne właściwości CSS, aby tworzyć bardziej skomplikowane animacje. Na przykład, grałem z lewej: -30 -> lewy: 0.

+0

nie mamy czasu, aby to przetestować w chwili obecnej, więc przepraszam, że nie chcę dać ci kleszczy, ale wspaniale jest widzieć, że pozornie można to zrobić bez JavaScriptu. Dzięki – byronyasgur

+0

znowu nie testowałem tego, ale z głosów wydaje się, że to musi działać i oczywiście css jest lepsze, więc słyszę zaznaczenie – byronyasgur

+2

Nie jestem pewien, dlaczego ktoś nie testuje rozwiązania, czego potrzebuje. –

6

Może robi coś takiego z jQuery:

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

Możesz chek skrzypce tutaj: http://jsfiddle.net/5zr4r/15/

UPDATE: zapomniałem powiedzieć, że należy usunąć fadein z ul.

+0

Dzięki tak, że jest to krok we właściwym kierunku. Wpływa na wszystkie dropdowns w tej chwili, ale jestem pewien, że mogę go zmodyfikować za pomocą $ (this) ... innym problemem jest to, że nie anuluje kiedy klikam poza obszarem, ale jestem pewien, że mogę to na zewnątrz ... dzięki – byronyasgur

+0

Nie ma za co! Zaktualizowałem swoją odpowiedź, aby wpłynęła tylko na odpowiednie rozwijane menu. – Dim13i

+0

Dzięki ... właściwie, chociaż napisany przeze mnie kod działa świetnie, może być coś złego w renderowaniu tekstu tutaj na przepełnieniu stosu ... ponieważ kiedy skopiowałem ten blok, zawiodłem stronę, ale kiedy Po prostu skopiowałem przez środkową linię, że zadziałało dobrze ...Myślę, że ma to coś wspólnego z ostatnimi dwiema linijkami, nie mogę tego zrozumieć, ale możesz chcieć spojrzeć na to w ramach edycji, aby zobaczyć, czy w postach są jakieś dziwne postacie. Jeśli nie możesz go znaleźć, jestem pewien, że każdy przyszły użytkownik może wpisać w ciągu ostatnich dwóch linii, a nie skopiować go. Jeszcze raz dziękuję – byronyasgur

0

Można spróbować:

// 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); 
}); 

wykorzystuje się istniejące show.bs.dropdown i hide.bs.dropdown funkcje Bootstrap i zmienia efekt rozwijaną do " zaniknąć "pojawi się" zamiast ". Możesz także zmienić fadeToggle() na slideDown(), jeśli chcesz zastosować "slajd". Mam nadzieję że to pomoże.

Oto skrzypce: http://jsfiddle.net/ck5c8/

+0

Proszę wyjaśnić, w jaki sposób rozwiązuje to problem, aby pomóc przyszłym użytkownikom w zrozumieniu tego pytania. – War10ck

+0

Zaktualizowałem kod i wyjaśniłem lepiej, w jaki sposób rozwiązuje problem w ramach PO. –

5

znalazłem rozwiązanie zbyt miły:

// 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(); 
}); 

Przykład: http://codepen.io/danielyewright/pen/EvckL

11

Chciałbym przedstawić nowoczesne, CSS-tylko podejście:

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

Dzięki temu .fade może obsługiwać tra nsition animation, ale .open jest tym, co kontroluje stan krycia i wskaźnika.

+0

Najlepsza odpowiedź, szybka, łatwa i skuteczna: D –

+1

Ta odpowiedź jest bardziej skuteczna niż wybrana odpowiedź udzielona przez @Benjamina. Po prostu upewnij się, że dodajesz klasę ".fade" do tego samego elementu, co klasa ".dropdown-menu". - Obsługuje zanikanie i zanikanie, wybrany tylko zanika i natychmiast znika zaraz po zbliżeniu. - Ta odpowiedź to mniej kodu. –

1

Mały uszczypnąć, aby Jason Featheringham na answer który działa w Bootstrap 4.

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

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