Hallo,
ich spiele zur Zeit etwas mit JavaScript herum und versuche mich gerade an einer animierten Navigation. Das ganze ist so geplant, dass sich ein <div>-Container per setTimeout von 0px Breite auf einen bestimmten Wert "ausdehnt". Funktioniert bisher auch alles prima, allerding habe ich nun das Problem, dass die Animation zu langsam abläuft.
Die Funktion, die ich geschrieben habe schaut folgendermaßen aus:
(Die Funktion getProperty die ich verwende gibt den style-Wert des übergebenen Elements und der übergebenen Eigenschaft zurück.)
Doch selbst wenn ich die Funktion jetzt mit 0 als speed aufrufe schleicht das ganze ziemlich.
Zwar könnte man jetzt pro Schritt den div gleich um z.B 5 Pixel vergrößern, das Problem ist nur, dass die Breite nicht fix ist, sondern variieren kann, d.h., dass der gewünschte Wert nie erreicht wird wenn die Breite nicht durch 5 teilbar ist.
Ich habe jetzt schon einige Zeit gesucht aber leider nichts gefunden. Gibt es denn eine elegante Lösung, oder muss ich jedesmal überprüfen, ob die errechnete Breite geteilt durch 5 einen Rest ergibt und evtl. aufgestockt werden muss?
ich spiele zur Zeit etwas mit JavaScript herum und versuche mich gerade an einer animierten Navigation. Das ganze ist so geplant, dass sich ein <div>-Container per setTimeout von 0px Breite auf einen bestimmten Wert "ausdehnt". Funktioniert bisher auch alles prima, allerding habe ich nun das Problem, dass die Animation zu langsam abläuft.
Die Funktion, die ich geschrieben habe schaut folgendermaßen aus:
Code:
//id ist die ID des zu ändernden Containers,
//value die Breite, die erreicht werden soll, und
//speed die Geschwindigkeit, bzw. die Verzögerung.
function scaleContainerWidth(id, value, speed) {
if (parseInt(getProperty(id, "width")) == value) {
return true;
} else if (parseInt(getProperty(id, "width")) > value) {
document.getElementById(id).style.marginLeft=(document.body.offsetWidth - parseInt(getProperty(id, "width"))) / 2 + "px";
document.getElementById(id).style.width = parseInt(getProperty(id, "width")) - 1 + "px";
setTimeout("scaleContainerWidth(\""+id+"\", "+value+", "+speed+")", speed);
} else if (parseInt(getProperty(id, "width")) < value) {
document.getElementById(id).style.marginLeft=(document.body.offsetWidth - parseInt(getProperty(id, "width"))) / 2 + "px";
document.getElementById(id).style.width = parseInt(getProperty(id, "width")) + 1+ "px";
setTimeout("scaleContainerWidth(\""+id+"\", "+value+", "+speed+")", speed);
}
}
(Die Funktion getProperty die ich verwende gibt den style-Wert des übergebenen Elements und der übergebenen Eigenschaft zurück.)
Doch selbst wenn ich die Funktion jetzt mit 0 als speed aufrufe schleicht das ganze ziemlich.
Zwar könnte man jetzt pro Schritt den div gleich um z.B 5 Pixel vergrößern, das Problem ist nur, dass die Breite nicht fix ist, sondern variieren kann, d.h., dass der gewünschte Wert nie erreicht wird wenn die Breite nicht durch 5 teilbar ist.
Ich habe jetzt schon einige Zeit gesucht aber leider nichts gefunden. Gibt es denn eine elegante Lösung, oder muss ich jedesmal überprüfen, ob die errechnete Breite geteilt durch 5 einen Rest ergibt und evtl. aufgestockt werden muss?
Zuletzt bearbeitet: