2012-12-11 16 views
10

Sto cercando di ottenere il menu a discesa standard della barra di navigazione su Twitter Bootstrap per dissolvenza in apertura anziché solo apparire. Ho provato ad aggiungere le classi fade e in ma non sembra svanire. Ecco il mio violino http://jsfiddle.net/byronyasgur/5zr4r/10/.È possibile ottenere i menu a tendina Bootstrap di Twitter per la dissolvenza in apertura?

Ho provato a farlo in un altro modo, ad esempio la risposta su this question ma ho qualche problema nel mirare al trigger a discesa con jquery.

risposta

25

Giocando con questo, sembra che le animazioni CSS funzionino al meglio.

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

È possibile aggiungere altre proprietà CSS per rendere più complesse le animazioni. Per esempio, ho giocato con la sinistra: -30 -> sinistro: 0.

+0

non ho avuto il tempo di testare questo momento, quindi mi dispiace non voglio darti il ​​segno di spunta, ma è bello vederlo apparentemente può essere fatto senza javascript. Grazie – byronyasgur

+0

ancora non ho provato questo, ma dai voti sembra che debba funzionare e ovviamente il css è preferibile quindi sto riaccendendo il tick – byronyasgur

+2

Non sono sicuro del motivo per cui qualcuno non testa la soluzione di cui ha bisogno. –

6

Forse fare qualcosa di simile con jQuery:

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

È possibile chek il violino qui: http://jsfiddle.net/5zr4r/15/

UPDATE: Ho dimenticato di dire che si dovrebbe rimuovere il fadein dal ul.

+0

Grazie sì che è un passo nella giusta direzione. Colpisce tutti i menu a cascata al momento, ma sono sicuro di poterlo modificare con un $ (questo) in qualche modo ... l'altro problema è che non si annulla quando faccio clic all'esterno dell'area, ma sono sicuro di poterlo capire fuori ... grazie – byronyasgur

+0

Prego! Ho aggiornato la mia risposta in modo che influenzi solo il menu a discesa corretto. – Dim13i

+0

Grazie ... in realtà però, mentre il codice che hai postato funziona perfettamente per me, potrebbe esserci qualcosa di sbagliato nel rendering del testo qui nello stack overflow ... perché quando ho copiato il blocco ha incasinato la pagina, ma quando Ho appena copiato sulla linea di mezzo ha funzionato bene ...Penso che abbia qualcosa a che fare con le ultime due righe, non riesco a capirlo, ma potresti volerlo dare un'occhiata in edit per vedere se ci sono caratteri strani nel post. Se non riesci a trovarlo, sono sicuro che i futuri visitatori potranno digitare oltre le ultime 2 righe anziché copiarlo comunque. Grazie ancora – byronyasgur

0

si può provare questo:

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

Utilizza esistenti show.bs.dropdown e hide.bs.dropdown funzioni di Bootstrap e cambia l'effetto discesa per " dissolvenza "in invece di" apparire ". È anche possibile modificare fadeToggle() a slideDown() se si desidera applicare una "diapositiva". Spero che questo ti aiuti.

Ecco il violino: http://jsfiddle.net/ck5c8/

+0

Si prega di spiegare come questo risolve il problema a portata di mano per aiutare i futuri visitatori a questa domanda a capire. – War10ck

+0

Ho aggiornato il codice e spiegato meglio come risolve il problema con l'OP. –

5

ho trovato troppo bella soluzione:

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

Esempio: http://codepen.io/danielyewright/pen/EvckL

11

mi piacerebbe presentare una CSS-unico approccio moderno,:

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

Ciò consente a .fade di gestire il tra animazione nsition, ma .open è ciò che controlla l'opacità e lo stato del puntatore.

+0

Risposta migliore, rapida, semplice ed efficace: D –

+1

Questa risposta è più efficace della risposta scelta fornita da @Benjamin. Assicurati di aggiungere la classe ".fade" allo stesso elemento su cui è attiva la classe ".dropdown-menu". - Gestisce una dissolvenza in entrata e in uscita, la prescelta si affievolisce e scompare immediatamente alla chiusura. - Questa risposta è meno codice. –

1

piccolo tweak per Jason Featheringham answer che opera nel Bootstrap 4.

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

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