il codice è abbastanza vicino a quello che vi serve. Penso che il problema principale siano i tuoi stili e capire come interagiscono con l'effetto.
L'effetto di piegatura mostrerà o nasconderà gli elementi in base al loro stato corrente. Hai la classe .fold
che avvia i tuoi div a 0x0 pixel e nascosta, ma quello che vuoi veramente è una regola che descrive come appaiono i tuoi div quando vengono mostrati ai tuoi utenti.
originale:
.fold {
display: none;
width: 0;
height: 0;
position: absolute;
}
Corretto:
.fold {
width: 500px;
height: 500px;
position: absolute;
}
Dal momento che il vostro stile .fold
è ora descrivendo lo stato finale dei vostri div, non ha più una regola display: none;
. Dal momento che si desidera che i div per essere inizialmente nascosto, si dovrebbe aggiungere un po 'di Javascript per nascondere quelli inizialmente:
$(".fold").hide();
Ora, invece di animare manualmente stili, è possibile utilizzare l'effetto duplice:
originale:
// if there is visible fold element on page (user already clicked at least once on link)
if (active.length) {
active.animate({
width: "0"
}, 200)
.animate({
height: "0"
}, 200, function() {
// this happens after above animations are complete
$(this).removeClass("active");
})
// clicking for the first time
}
if (active.attr("id") != page) {
$("#" + page)
.addClass("active")
.animate({
height: "500px"
}, 1000, 'linear')
.animate({
width: "500px"
}, 400, 'linear')
}
Aggiornato:
if (active.length) {
active.toggle("fold", function() {
$(this).removeClass("active");
});
}
// clicking for the first time
if (active.attr("id") != page) {
$("#" + page)
.addClass("active")
.toggle("fold");
}
Ora che tutto questo è worki ng, penso che vorrai giocare con alcune impostazioni. Lo documentation for the fold effect mostra che è possibile impostare la dimensione dell'elemento non appena viene piegato e l'ordine di piegatura. Per simulare il collegamento che hai postato, impostare size
su 5 poiché i tuoi div hanno un bordo 5px. Vorrei anche impostare horizFirst
a true
poiché questo è ciò che mostra il tuo esempio.
Ho anche deciso di utilizzare toggleClass
anziché addClass("active")
e removeClass("active")
. Ciò ha portato a impostazioni più semplici.
Ecco il prodotto finito:
$(".fold").hide();
var foldSettings = {
easing: 'linear',
duration: 1200,
size: 5,
horizFirst: true,
complete: function() {
$(this).toggleClass("active");
}
}
$("a").click(function() {
var page = $(this).data("page");
if ($('div:animated').id != page) {
var active = $(".fold.active");
// if there is visible fold element on page (user already clicked at least once on link)
if (active.length) {
active.toggle("fold", foldSettings);
}
// clicking for the first time
if (active.attr("id") != page) {
$("#" + page).toggle("fold", foldSettings);
}
}
});
http://jsfiddle.net/z69zofxm/3/
controllo questo http://jsfiddle.net/6jv52yea/ –