Diamo un'occhiata al codice HTML prima. Si desidera:
<div id="arrow">▲ (view less)</div>
<div id="main">
<div id="content1">text from #content1</div>
<div id="content2">text from #content2</div>
<div id="content3">text from #content3</div>
<div id="content4">text from #content4</div>
</div>
<div id="toggle_view">view more</div>
Poi per il CSS, si vuole:
#main {overflow-y:hidden;height:100px;position:relative}
#arrow {cursor: pointer;}
#toggle_view{ cursor: pointer;}
.inactive { color: gray; }
E 'davvero difficile dire qualcosa è possibile fare clic se non c'è cursor:pointer
. Inoltre, vogliamo indicare agli utenti quando un pulsante è inattivo (es. È inutile fare clic su "visualizza di più" se lo stai già visualizzando ogni
Tutti onesti, andiamo al JavaScript. usando una libreria, ma non quale, quindi assumerò solo jQuery.In primo luogo, abbiamo bisogno di impostare le nostre variabili:
var heightOfMain = $('#main').height();
var heightOfContent1 = $('#content1').height();
var differenceInHeight = heightOfMain - heightOfContent1;
Poi, quando si clicca su #arrow
, vogliamo cambiare l'altezza di #main
per rimuovere #content2
, #content3
, e #content4
, lasciando solo #content1
alle spalle (in pratica, vogliamo "rimuovere" un'altezza pari a differenceInHeight
). Desideriamo anche inattivare lo #arrow
, poiché non ha senso dire "visualizza meno" se stai già visualizzando di meno. Infine, vogliamo essere sicuri che "view more" sia attivo (visto che lo cambieremo più avanti).
$('#arrow').click(function() {
$('#main').animate({
height: heightOfContent1
});
$(this).addClass('inactive');
$('#toggle_view').removeClass('inactive');
});
Infine, vogliamo abilitare #toggle_view
. Facendo clic su questo, vogliamo aggiungere nuovamente l'altezza che abbiamo tolto (differenceInHeight
). Quindi, dato che abbiamo già visto tutto, possiamo disattivare la "visualizzazione di più". Infine, dobbiamo attivare di nuovo "visualizza di meno".
$('#toggle_view').click(function() {
//you want to remove contents 2 through 4, which have a combined height
//of differenceInHeight
$('#main').animate({
height: differenceInHeight });
$(this).hide();
$('#arrow').show();
});
Per tutto ciò che viene messo insieme, vedere this jsFiddle.
perché non usi solo "display: none' per #content? –
Voglio animare il contenuto con la vista di più e vedere meno – vusan
Stai cercando di costruire un interruttore per mostrare/nascondere il contenuto? –