Der Stack Overflow bzw. zu tiefe Rekursion kommt auch erst dann, wenn man eben hektisch hovert.
Probier das mal, ich hoffe ich hab's genug getestet
var fade = new function() {
var node;
var opacity = 0;
var is_fade_in = true;
var do_next;
var aktiv = false;
function fade_func() {
node.style.filter = 'Alpha(opacity=' + opacity + ')';
node.style.opacity = opacity / 100;
opacity += is_fade_in ? 1 : -1;
window.status = opacity + '/'+ is_fade_in + '/' + do_next + '/' + aktiv;
if((is_fade_in && opacity > 100) || (!is_fade_in && opacity < 0)){
if(do_next) {
if(is_fade_in && do_next < 0 ||
!is_fade_in && do_next > 0) {
is_fade_in = !is_fade_in;
do_next = 0;
window.setTimeout(fade_func, 1000);
}
} else {
aktiv = false;
}
} else {
aktiv = true;
window.setTimeout(fade_func, 10);
}
};
this.init = function(action, fade_node) {
action = document.getElementById(action);
node = document.getElementById(fade_node);
if(!action || !node) return;
action.onmouseover = function() {
if(!aktiv) {
is_fade_in = true;
fade_func();
} else {
do_next = is_fade_in ? 0 : 1; // fade_in
}
};
action.onmouseout = function() {
if(!aktiv) {
is_fade_in = false;
fade_func();
} else {
do_next = !is_fade_in ? 0 : -1; // fade_out
}
};
};
};
fade.init('foo', 'fadein');
Struppi.