La funzione che ho fatto è questa:
Codice PHP:
var u = true;
var i = 0;
var e;
function dec(){
var h = e.offsetHeight;
if((h - i) < 0){
e.style.height = "0px"
i = 1;
u = false;
window.clearInterval(x);
}else{
i++;
h = h - i;
e.style.height = h+"px";
}
}
function inc(){
var h = e.offsetHeight;
if( he < 1 ){
he = y;
}
if((h + i) > he){
e.style.height = he+"px"
i = 1;
u = true;
window.clearInterval(x);
}else{
i++;
h = h + i;
e.style.height = h+"px";
}
}
function hider(id){
e = document.getElementById(id);
e.style.overflow = 'hidden';
if(u){
he = e.offsetHeight;
x = window.setInterval("dec()", 10);
}else{
y = e.offsetHeight;
x = window.setInterval("inc()", 10);
}
}
invece di passare valori ho usato variabili globali.
Funzionare funziona... ma ha solo un piccolo problema... essendo globali se ci metto più menù a scomparsa interferiscono tra loro...
Ho pensato allora di crearmi degli classi, visto che javascript e rigorosamente orientato ad oggetti, e creare un oggetto per menù.
La classe è la seguente:
Codice PHP:
function oggetto(){
this.u = true;
this.i = 1;
this.he = 0;
this.x = 0;
this.e = 0;
this.y = 0;
oggetto.prototype.dec = function(){
var h = this.e.offsetHeight;
if((h - this.i) < 0){
this.e.style.height = "0px"
this.i = 1;
this.u = false;
window.clearInterval(this.x);
}else{
this.i++;
h = h - this.i;
this.e.style.height = h+"px";
}
};
oggetto.prototype.inc = function(){
var h = this.e.offsetHeight;
if( this.he < 1 ){
this.he = this.y;
}
if((h + this.i) > this.he){
this.e.style.height = this.he+"px"
this.i = 1;
this.u = true;
window.clearInterval(this.x);
}else{
this.i++;
h = h + this.i;
this.e.style.height = h+"px";
}
};
oggetto.prototype.hider = function(id){
this.e = document.getElementById(id);
this.e.style.overflow = 'hidden';
this.e.style.visibility = 'visible';
this.e.style.display = 'block';
if(this.u){
this.he = this.e.offsetHeight;
this.x = window.setInterval(this.dec(), 10);
}else{
this.y = this.e.offsetHeight;
this.x = window.setInterval(this.inc(), 10);
}
};
}
ma non funziona... eppure mi sembra che la dichiarazione della classe sia giusto e sia l'esatto corrispondente delle funzioni create precedentemente... se qualcuno mi sa dare una mano mi farebbe comodo...
grazie,
ciao