setInterval verschieden lang bei IE und NS
Kalle_Worms
- javascript
Hallöle,
ich möchte eine Grafik von links nach rechts über den Bildschirm laufen lassen, indem ich den linken Rand mehrmals um 1% erhöhe.
Die Funktion zur Neupositionierung rufe ich mit setInterval alle 5 Millisekunden auf. Demnach müsste die Grafik in etwa 1 sec. am Ziel sein.
Der IE machts korrekt, während NS und FF die vierfache Zeit benötigen.
Wenn ich die Zeit auf 50 ms hochsetze, läufts gleichmäßig etwa 4 sec in dreien (wie heisst beiden +1 ?) Browsern.
Habe den Verdacht, dass NS und FF nur recht große Millisekunden mögen, ist der Bug bekannt oder habe ich was falsch gemacht?
Hier das Script:
var start_x = 0; // Rand in Prozent
var tempo = 50; // Millisekunden
var aktiv, diff;
function Move(name, ziel_x) {
if ( aktiv ) window.clearInterval(aktiv);
window.document.images[name].style.visibility = "visible";
if ( start_x != ziel_x && ziel_x >= 0 && ziel_x <= 100) {
if ( start_x < ziel_x ) diff = 1; else diff = -1;
aktiv = window.setInterval("doMove('"+name+"',"+ziel_x+")",tempo);
}
}
function doMove(name, ziel_x) {
// OHNE RUNDUNG UNGENAU WG. HEXAZAHL:
start_x = Math.round(( start_x +diff )* 100 ) / 100;
window.document.images[name].style.marginLeft = start_x+'%';
if (( start_x == ziel_x ) ) {
window.clearInterval(aktiv);
}
}
...
<body onLoad="javascript:Move('bild',90)">
Danke schon mal für Tipps.
Kalle
Der IE machts korrekt, während NS und FF die vierfache Zeit benötigen.
Was mir bei NS und FF gerade auffällt: Die Seite hat ein <iframe> und dessen Textinhalt zittert, wenn die Grafik läuft.
Kann es sein, dass jedesmal die Seite oder der (unbeteiligte) <iframe> komplett neu aufgebaut wird ?
Hallo Kalle,
Die Funktion zur Neupositionierung rufe ich mit setInterval alle 5 Millisekunden auf. Demnach müsste die Grafik in etwa 1 sec. am Ziel sein.
Der IE machts korrekt, während NS und FF die vierfache Zeit benötigen.
Wenn ich die Zeit auf 50 ms hochsetze, läufts gleichmäßig etwa 4 sec in dreien (wie heisst beiden +1 ?) Browsern.
Icch verstehe gar nicht, warum du die CPU deines Rechners derart strapazieren willst, wenn ein menschliches Auge ohnehin Bilder die im Abstand einer 24stel Sekunde ablaufen (Kinofilm), bereits als flüssige Bewegung wahrnimmt.
Versetze lieber dein Element in größeren Pixel-Schrittweiten, aber geh auf keinen Fall unter 40 Millisekunden im Intervall, das bringt doch gar nichts!
Gruß Gernot
你好 Kalle_Worms,
Die Funktion zur Neupositionierung rufe ich mit setInterval alle 5
Millisekunden auf. Demnach müsste die Grafik in etwa 1 sec. am Ziel sein.Der IE machts korrekt, während NS und FF die vierfache Zeit benötigen.
Ja, das kann schon sein. Die Aufloesung bei den Browsern ist sehr
unterschiedlich. Sinnvoller waere es deshalb, 50ms zu nehmen und stattdessen
ein paar Pixel mehr zu addieren. 50ms macht pro Sekunde 25 Bilder, das
reicht fuer das menschliche Auge dicke aus -- wenn es noch ruckelig aussieht
kannst du auf 30ms reduzieren oder aber die Pixel-Schritte kleiner machen,
weiter herunter als 30ms solltest aber nicht gehen. Das kostet nur CPU-Zeit.
再见,
CK
Hi,
50ms macht pro Sekunde 25 Bilder, das
1000ms / 50ms = ? ;-)
cu,
Andreas
你好 MudGuard,
50ms macht pro Sekunde 25 Bilder, das
1000ms / 50ms = ? ;-)
Ehm, ja, ich meinte natuerlich 40ms. Danke :)
再见,
CK
Hi,
Ehm, ja, ich meinte natuerlich 40ms. Danke :)
Ich war schon am Überlegen, ob Du evtl. in der Stadt mit dem schiefen Turm wohnst ;-)
cu,
Andreas
Hallo,
... in dreien (wie heisst beiden +1 ?) Browsern.
in den drei Browsern.
Habe den Verdacht, dass NS und FF nur recht große Millisekunden mögen, ist der Bug bekannt oder habe ich was falsch gemacht?
5 msec ist sehr kurz. Ich dachte bisher immer, die PC-Uhr läuft im 10 msec-Takt.
Ich habe bei Mozilla/Firefox die Erfahrung gemacht, dass sie beim "hantieren im DOM-Baum", also z.B. Erzeugen und positionieren von Elementen viel langsamer sind, als der IE. Beides könnten Gründe für die Abweichung sein. Aber wie die anderen schon schrieben, 20 bis 30 Schritte pro Sekunde sind sicher genug.
Gruß, Jürgen