Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Laufschrift ist abhängig von der PC-Geschwindigkeit mal zu schnell, mal zu langsam
Frage
Hallo, für meine Website habe ich folgende Laufschrift programmiert:
<head>
...
<script language="JavaScript1.2" type="text/javascript">
<!--
<!-- Laufschrift -->
var z=1;
var b=1;
var g=1;
function laufe()
{
if (document.layers) document.band.left=z;
else document.all.band.style.left=z;
z-=g;
if(z<-2500)z=910;
setTimeout("laufe()",b);
}
//-->
</script>
<style type="text/css">
<!--
#band
{
position:absolute;
}
h4{ color:white;}
//-->
</style>
<meta name="author" content="">
</head>
<body onLoad="laufe()" bgcolor="#383539" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">
<!--Ticker//-->
<DIV ID="band">
<table width="100%">
<tr>
<td width="100%" nowrap>
<h4>
Neu: bla,bla,bla
-> XXXXX: täglich 9.00-13.05 Uhr
-> YYYY: Montag, Mittwoch und Freitag 9.00-11.30 Uhr
</h4>
</td>
</tr>
</TABLE>
</DIV>
...
Das Problem ist nun, daß auf schnellen Rechnern das Laufband recht flott zu Ende ist und dann eine längere Pause entsteht, bevor es von vorne beginnt.
Bei sehr langsamen Rechnern bricht es hingegen vor dem Ende ab und beginnt am Anfang von Neuem.
Frage: gibt es auch eine hardware-unabhängige Lösung?
DANKE IM VORAUS!
Antwort 1 von mubarak
Hi, sicher hängt es auch von der Rechnergeschwindigkeit ab und der im Script programmierten Schrittgeschwindigkeit. Hast schon mal nach fertigen Laufschriften geschaut? Vielleicht kannst du dir dort was abschauen. Ich verwende z.B. ein Applet von DanCity auf Java-Basis. Es gibt aber auch noch viele Andere z.B. wo man den Anzeigetext in eine externe Datei eingeben kann z.B. hier:http://www.methodica.ch/download/ticker/t_ticker.htm
Antwort 2 von Proggi
die ist deshalb abhängig von der rechnergeschwindigkeit weil du 2 fehler drin hat:
function laufe() {
... laufe()
ungünstig da du bei jedem durchlauf wieder einen durchlauf startest. das heißt das programm belegt immer mehr speicher da die schleife nicht beendet wird.
anstelle von Laufe kannst au auch schreiben::
function laufe() {
if (document.layers) document.band.left=z;
else document.all.band.style.left=z;
z-=g;
if(z<-2500)z=910;
setTimeout("
}
und in der schleife wird es wieder ersetzt etc also jeder weitere durchlauf der schleife wartet auf das ende der in ihr wieder gestarteten schleife - starte nicht aus einer schleife die gleiche schleife wieder da du damit eventuell versehendlich eine kaskade startest...
zweiter fehler:
du setzt ein timeout von 1 also 1/1000s das ist so wenig das du versuchst 1000 durchläufe pro sekunde zu machen daher läußt das viel zu schnell wenn der pc mitkommt.
Lösung:
ruft laufe alle 0,1 sekunden auf
Laufe selber must du dann umschreiben:
müste etwa hinkommen - ich hab nun dein Laufe nur so umgeschrieben das laufe selbst sich nicht wieder aufruft und gewöhne dir an deinen quelltext einheitlicher zu gestallten, also blöcke mit klammern abzuschließen um start und ende einer if-schleife besser finden zu können.
function laufe() {
... laufe()
ungünstig da du bei jedem durchlauf wieder einen durchlauf startest. das heißt das programm belegt immer mehr speicher da die schleife nicht beendet wird.
anstelle von Laufe kannst au auch schreiben::
function laufe() {
if (document.layers) document.band.left=z;
else document.all.band.style.left=z;
z-=g;
if(z<-2500)z=910;
setTimeout("
Zitat:
function laufe() {
if (document.layers) document.band.left=z;
else document.all.band.style.left=z;
z-=g;
if(z<-2500)z=910;
setTimeout("laufe()",b);
}
",b);function laufe() {
if (document.layers) document.band.left=z;
else document.all.band.style.left=z;
z-=g;
if(z<-2500)z=910;
setTimeout("laufe()",b);
}
}
und in der schleife wird es wieder ersetzt etc also jeder weitere durchlauf der schleife wartet auf das ende der in ihr wieder gestarteten schleife - starte nicht aus einer schleife die gleiche schleife wieder da du damit eventuell versehendlich eine kaskade startest...
zweiter fehler:
du setzt ein timeout von 1 also 1/1000s das ist so wenig das du versuchst 1000 durchläufe pro sekunde zu machen daher läußt das viel zu schnell wenn der pc mitkommt.
Lösung:
Zitat:
<body onLoad="setInterval('laufe()', 100);">
<body onLoad="setInterval('laufe()', 100);">
ruft laufe alle 0,1 sekunden auf
Laufe selber must du dann umschreiben:
Zitat:
function laufe() {
if (document.layers) {
document.band.left=z;
}
else {
document.all.band.style.left=z;
}
z-=g;
if (z<-2500) {
z=910;
}
}
function laufe() {
if (document.layers) {
document.band.left=z;
}
else {
document.all.band.style.left=z;
}
z-=g;
if (z<-2500) {
z=910;
}
}
müste etwa hinkommen - ich hab nun dein Laufe nur so umgeschrieben das laufe selbst sich nicht wieder aufruft und gewöhne dir an deinen quelltext einheitlicher zu gestallten, also blöcke mit klammern abzuschließen um start und ende einer if-schleife besser finden zu können.
Antwort 3 von Proggi
kleine korrektur (aber vom grundsatz bleibts ungünstig mit dem laufe...laufe)
die vorherige schleife wird schon beendet da du die im timeout startest, aber ich würde trotzdem vermeiden die schleife in der schleife zu starten da es zu unerwünschten nebeneffekten führen kann eine schleife sich selbst ausführen zu lassen.
die vorherige schleife wird schon beendet da du die im timeout startest, aber ich würde trotzdem vermeiden die schleife in der schleife zu starten da es zu unerwünschten nebeneffekten führen kann eine schleife sich selbst ausführen zu lassen.
Antwort 4 von rfb
Wenn du schon solchen Unsinn einbaust kannst du auch einfach das proprietäre Tag
Letztlich nervt bewegte Schrift nur, daher ein gut gemeinter Rat: lass es einfach weg!
marquee nutzen, schlimmer wird dein Quellcode dadurch auch nicht.Letztlich nervt bewegte Schrift nur, daher ein gut gemeinter Rat: lass es einfach weg!
Antwort 5 von benny_aua
Vielen Dank für die Tipps, es funktioniert super!
Antwort 6 von rfb
Zitat:
Vielen Dank für die Tipps, es funktioniert super!
ich hoffe du meinst den letzten TippVielen Dank für die Tipps, es funktioniert super!
Zitat:
lass es einfach weg!
lass es einfach weg!

