2012-07-16 19 views

risposta

8

questo dovrebbe funzionare, dovuto provare un po 'troppo ..: D

css3 animation jsfiddle

+0

Buono, ma come evitare di impostare l'altezza in javascript? La lunghezza del contenuto all'interno della classe più sta per variare. – Felix

+3

come scritto [qui] (http://stackoverflow.com/a/3512194/1517380) questo non è possibile atm (dato che volevi avere un'animazione giusta?) tranne con [una soluzione alternativa costosa qui descritta] (http://stackoverflow.com/questions/3149419/can-you-use-css3-to-transition-from-height0-to-the-variable-height-of-content – r3bel

+0

ho modificato nuovamente il jsfiddle e aggiunto una "soluzione" per l'altezza dinamica, ma devi ottenere l'altezza del menu a discesa ogni volta che l'altezza del menu a discesa cambia con javascript: [jsfiddle] (http://jsfiddle.net/Bq6eK/217 /). non ti garantisco che funzioni correttamente con tutti i browser: D – r3bel

2

http://jsfiddle.net/Bq6eK/215/

Io non modificare il codice per questa soluzione, ho scritto il mio proprio invece. La mia soluzione non è esattamente quella che hai chiesto, ma forse potresti farcela con le conoscenze esistenti. Ho commentato anche il codice, quindi sai cosa sto facendo esattamente con le modifiche.

Come soluzione per "evitare l'impostazione dell'altezza in JavaScript", ho appena reso "maxHeight" un parametro nella funzione JS denominato toggleHeight. Ora può essere impostato nell'HTML per ogni div di classe espandibile.

Lo dirò in anticipo, non ho molta esperienza con i linguaggi front-end e c'è un problema in cui è necessario fare clic due volte sul pulsante "Mostra/nascondi" inizialmente prima dell'avvio dell'animazione. Sospetto che sia un problema con attenzione.

L'altro problema con la mia soluzione è che si può effettivamente capire cos'è il testo nascosto senza premere il pulsante mostra/nascondi semplicemente facendo clic sul div e trascinando verso il basso, è possibile evidenziare il testo che non è visibile e incollarlo in uno spazio visibile

Il mio suggerimento per un prossimo passo in cima a quello che ho fatto è di farlo in modo che il pulsante mostra/nascondi cambi dinamicamente. Penso che tu possa capire come farlo con ciò che già sembra sapere sul mostrare e nascondere il testo con JS.

+0

Ho apportato due modifiche minori: http://jsfiddle.net/Bq6eK/215/. 'onclick =" ... "' dovrebbe restituire false, e l'altezza dovrebbe essere impostata direttamente per l'elemento, non nel CSS. Altrimenti devi cliccare due volte per aprire la finestra, perché 'elem.style' contiene solo lo stile impostato direttamente per l'elemento, ma non gli stili effettivi. – kay

+0

Grazie! Ora capisco. – ayang9

0

Ecco una soluzione che non utilizza affatto JS. Utilizza invece checkboxes.

È possibile nascondere la casella di controllo con l'aggiunta di questo al vostro CSS:

.container input{ 
    display: none; 
} 

e quindi aggiungere un po 'di stile per farlo sembrare come un button.

Here's the source code that I modded.

+2

La soluzione non applica un'altezza in base alla quantità di testo. Nel CSS devi decidere l'altezza del div checked: '.ac-container input: checked ~ article.ac-small { \t height: 140px; } 'Ho bisogno di una soluzione che applichi l'altezza in base al contenuto. – Felix

0

OMG, ho cercato di trovare una semplice soluzione a questo per ore . Sapevo che il codice era semplice ma nessuno mi ha fornito quello che volevo. Quindi, finalmente, è arrivato il momento di lavorare su un codice di esempio e abbiamo creato qualcosa di semplice che chiunque non possa usare JQuery richiesto. Semplice javascript e css e html. Per far funzionare l'animazione devi impostare l'altezza e la larghezza o l'animazione non funzionerà. Trovato fuori nel modo più duro.

<script> 
     function dostuff() { 
      if (document.getElementById('MyBox').style.height == "0px") { 

       document.getElementById('MyBox').setAttribute("style", "background-color: #45CEE0; height: 200px; width: 200px; transition: all 2s ease;"); 
      } 
      else { 
       document.getElementById('MyBox').setAttribute("style", "background-color: #45CEE0; height: 0px; width: 0px; transition: all 2s ease;"); 
      } 
     } 
    </script> 
    <div id="MyBox" style="height: 0px; width: 0px;"> 
    </div> 

    <input type="button" id="buttontest" onclick="dostuff()" value="Click Me"> 
Problemi correlati