Verzweifelung pur!
Torben
- dhtml
Hi Leute!
Ich habe ein dynamisches Menü eingebaut , welches über einer Tabelle im Falle eines Runterscrollens mitläuft!
Jetzt bastle ich schbon den ganzen Morgen an zwei Probleme, und ich bin so langsam am verzweifeln. Vielleicht kann mir ja jemand helfen!
Also, auf www.powerbulls.de/home.htm ist links das Menü ( ein Punkte bzwe flash vier!), wenn ich mit netscape darauf gehe, funktioniert alles einwandfrei. Wenn ich jetzt aber explorer nutze, macht er zwei Sachen. Beim ersten Aufrufen der Seite scrollt er das Menü, setzt es aber immer ganz nach oben, statt an die cvon mir vorgegebene Stelle. Das zweite Problem ist, wenn ich die Seite reloade, dann will er nämlich das ganze Menüp nicht mehr scrollen.
Ich hoffe jemand kann mir helfen, oder jemand sagt mir den Code für solch einMenü, der getestet ist und funktioniert. generell habe ich den Code von http://www.guppi.de/dhtml/scrollnav.shtml und dann an meine Bedingungen angepasst!
Hi,
erstmal müssen wir den Javascript-Error wegbekommen. Ersetze mal die Zeile 37:
if(IE) { diffY = document.body.scrollTop; diffX = document.body.scrollLeft; }
durch folgendes:
if(IE) {
if (document.body) {
if (document.body.scrollTop) diffY = document.body.scrollTop;
if (document.body.scrollLeft) diffX = document.body.scrollLeft;
}
}
Wenns dann nicht funzt, müssen wir weitersuchen.
MfG
hartmut R.
OK, danke mal zuerst, dass du dich meines Problemes angenommen hast, bin dir sehr verbunden!
Java-script-error habe ich behoben!!!
Jetzt käuft allerdings das Menü nicht mit!
Netscaüe funktioniert weiter einwandfrei!
Torben
Jetzt käuft allerdings das Menü nicht mit!
Na, dann war das eine Abfrage zuviel, ersetze jetzt den letzten Vorschlag:
if(IE) {
if (document.body) {
if (document.body.scrollTop) diffY = document.body.scrollTop;
if (document.body.scrollLeft) diffX = document.body.scrollLeft;
}
}
durch folgendes:
if(IE) {
if (document.body) {
diffY = document.body.scrollTop;
diffX = document.body.scrollLeft;
}
}
Dann schuen wir wieder.
MfG
Hartmut R.
Hi!
Habe geändert, aber er hat jetzt wieder einen java-fehler, div Y erkennter nicht!
Weiss nicht weiter!
Torben
natürlich diff y!
Jetzt käuft allerdings das Menü nicht mit!
Na, dann war das eine Abfrage zuviel, ersetze jetzt den letzten Vorschlag:
if(IE) {
if (document.body) {
if (document.body.scrollTop) diffY = document.body.scrollTop;
if (document.body.scrollLeft) diffX = document.body.scrollLeft;
}
}
durch folgendes:
if(IE) {
if (document.body) {
diffY = document.body.scrollTop;
diffX = document.body.scrollLeft;
}
}
Dann schuen wir wieder.
MfG
Hartmut R.
Hallo,
ich hab mir mal den Code angeguckt,
ich weiß jetzt nicht, mit welcher IE-Version das ursprüngliche Problem auftrat (vor der ersten Änderung), aber so wie es jetzt ist geht es nicht:
1. würdest Du mit jedem Browser außer IE und Netscape 4 einen Javascriptfehler bekommen, wegen folgendem:
NS = (document.layers) ? 1 : 0;
IE = (document.all) ? 1: 0;
function heartBeat() {
if(IE) {
if (document.body) {
if (document.body.scrollTop) diffY = document.body.scrollTop;
if (document.body.scrollLeft) diffX = document.body.scrollLeft;
}
}
if(NS) { diffY = self.pageYOffset; diffX = self.pageXOffset; }
if(diffY != lastScrollY) {
percent = .1 * (diffY - lastScrollY);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.slide.style.pixelTop += percent;
if(NS) document.slide.top += percent;
lastScrollY = lastScrollY + percent;
}
if(diffX != lastScrollX) {
percent = .1 * (diffX - lastScrollX);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.slide.style.pixelLeft += percent;
if(NS) document.slide.left += percent;
lastScrollX = lastScrollX + percent;
}
}
Die Variable diffY ist z.B. nur für IE und Netscape 4 definiert (wenn es dann mal funktioniert), die Abfrage
if(diffY != lastScrollY)
wird aber mit allen Browsern gemacht, so daß die dann mit einem Script-Error abpfeffern.
Mußt Du also vorneweg alle Variablen initialisieren, z.B. mit
var diffY=0; dann sollte nix schlimmes passieren, auch wenn jemand mit einem anderen Browser kommt.
Die letzte Änderung mit if (document.body.scrollLeft) und if (document.body.scrollTop) geht deshalb nicht, weil die Werte am Anfang 0 sind, was das selbe ist wie false, also mach das mal wieder raus, dann können wir weitersehn.
Gruß, Lutz.
Wäre die sehr verbunden, wenn du dein Änderungen am Code kurz hier reinkopierst, denn ich bin jetzt nicht ganz sicher, von welcher Version du asugehstm, von der ersten, dergeänderten, oder der letzten??
Schreib doch bitte einfach den code für if(IE) kurz rein!
Danke Dir!
Torben
Wäre die sehr verbunden, wenn du dein Änderungen am Code kurz hier reinkopierst, denn ich bin jetzt nicht ganz sicher, von welcher Version du asugehstm, von der ersten, dergeänderten, oder der letzten??
Schreib doch bitte einfach den code für if(IE) kurz rein!
Danke Dir!
Torben
Hallo nochmal,
ich hatte noch die Version nach der 2 Änderung, die jetzt wieder zurückgenommen wurde. Ich war jetzt gerade noch mal mit IE 5.5 auf Deiner Seite und hatte folgenden Scriptfehler:
diffY ist undefiniert
Hab dann die Seite noch mal geladen und der Fehler war weg.
Menü scrollt auch wie gewünscht.
Hab jetzt auch das Problem lokalisiert:
if(NS || IE) action = window.setInterval("heartBeat()",1);
steht im script, bevor der body aufgeht. D.h, er will auf den body zugreifen (jede Millisekunde), und der body ist noch gar nicht geladen. Also mach da zwei Sachen:
1. Nimm die Zeile und setz sie ganz unten in den body in ein JavaScript-Bereich oder ins onLoad vom body-tag
2. Setz das Intervall hoch auf mindestens 20 Millisekunden sonst spielt der Netscape 4 auf langsamen Rechnern verrückt. Besser ist noch, du machst statt setInterval ein
window.setTimeout("heartBeat()",30); was Du dann auch noch mal ans Ende der Funktion heartBeat() schreiben mußt, damit sie sich wieder aufruft.
Gruß Lutz.
Danke für deine Mühen!
Leider klappt es immer noch nicht, ich benutze ie 6.x!
Schau bitte noch einmal über den code drüber, ich habe die erste Version genommen und deine Änderungen soweit vorgenommen, sprich im onload ergänzt und auch am ende von heartbeat!
Wenn deine Vesrion funktioniert, kannst dumir auch gerne den gesamten Quellcode an meine email schicken!
Danke!
Torben
Danke für deine Mühen!
Leider klappt es immer noch nicht, ich benutze ie 6.x!
Schau bitte noch einmal über den code drüber, ich habe die erste Version genommen und deine Änderungen soweit vorgenommen, sprich im onload ergänzt und auch am ende von heartbeat!
Wenn deine Vesrion funktioniert, kannst dumir auch gerne den gesamten Quellcode an meine email schicken!
Danke!
Torben
Hoppla,
da kommen ja 2 neue Fehler
1. JavaScript-Fehler Zeile 147: Nichtabgeschlossene Zeichenfolge.
2. JavaScript-Fehler Zeile 204: Objekt erwartet. (kann ein Folgefehler sein, muß aber nicht)
Zeile 147 ist:
if(NS || IE) action = window.setTimeout("heartBeat()",30)";
Hier ist was falsch.
Merke: Die Anzahl der Anführungszeichen muß immer geradzahlig sein, sonst kanns nicht gehen. Also das letzte Anführungszeichen weglassen (hättest Du doch auch selbst drauf kommen können):
if(NS || IE) action = window.setTimeout("heartBeat()",30);
aber ich seh gerade auf Zeile 147 gehört das gar nicht hin, denn Du mußt das doch vor das Ende vom body schreiben, in einen JavaScript-Bereich, damit das erst aufgerufen wird, wenn der body auch geladen ist:
<script LANGUAGE="JavaScript">
if(NS || IE) action = window.setTimeout("heartBeat()",30);
</script>
Das ist die sichere Variante, weil die Funktion heartBeat() nur dann aufgerufen wird, wenn der Browser auch ein Netscape 4 oder IE ist.
Mit dem Funktionsaufruf im Body-onnLoad würde die Funktion ja mit allen Browsern gestartet werden, und da würdest du den JavaScript-Fehler 'diffY is undefined' bekommen, weil diffY nur beim NS oder IE ermittelt wird.
Dein zweiter Script-Fehler ist hier:
onload="laufschrift();window.setTimeout();"
Die Funktion window.setTimeout(); erwartet zwei Parameter, die du nicht angegeben hast, lies mal im SELFHTML nach wie das geht.
wenn du aber
if(NS || IE) action = window.setTimeout("heartBeat()",30);
schon am Ende vom Body hast, brauchst du das im onLoad dann nicht noch mal, also mach dein onload einfach wieder zu
onload="laufschrift();"
Und beschäftige dich mal ein bisschen mit den Grundlagen von JavaScript, denn wenn ich dir jetzt den fertigen Code poste, ist dir ja auch nicht geholfen, weil du dann beim nächsten Problemchen wieder steckenbleibst.
Gruß, Lutz
Ich habe die Kurve gekriegt, habe ein bißchen umgestellt und hoppla, es geht!
Deine Anweisungen zu meinen Kenntnissen nehme ich an, danke!
Danke für deine Hilfe!
Torben