Javascript Menü zu langsam :-(
Sascha
- javascript
0 Fritz0 wahsaga0 Chräcker Heller
hi zusammen,
hab mir auch ein Javamenü aus dem internet geholt (von http://skripte.rabich.de/skripte/anwendungen/menue.html) leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?
http://www.draischiibe.de
für Hilfe wäre ich dankbar.
Grüsse sascha
quellcode:
/*
Copyright (c) 2000 by DS. Alle Rechte vorbehalten.
Version: 2.3.1b Datum: 23.9.1999
Aenderungen: 23.2.2000 Optimierungen 15.3.2000 oeffne_menue_pfad() implementiert
Das Dokument enthaelt alle zentral zur Verfuegung stehenden Funktionen.
*/
// === Variablen (global) ===
var eintraege = new Array() var bildname = "Bild"
// === Parameter (Vorbelegung) ===
var body_bgcolor = "FF0000" var body_background = "" var body_text = "FFFFFF" var body_link = "FFFFFF" var body_alink = "FFFFFF" var body_vlink = "FFFFFF" var body_hover = "CCCCFF" var a_underline = false var menue_pre = "<B><SMALL>" var menue_post = "</SMALL></B>" var eintrag_pre = "<EM><SMALL>" var eintrag_post = "</SMALL></EM>" var menue_titel = "<TABLE WIDTH="100%" CELLPADDING="2" CELLSPACING="0" BORDER="0" BGCOLOR="#CCCCFF">" + "<TR ALIGN="CENTER">" + "<TD><B><FONT COLOR="#FFFFFF">Menü</FONT></B></TD>" + "</TR>" + "</TABLE>" var menue_style = "font-family: Verdana, Arial, sans-serif;" var rand = 0 var bild_eintrag = "normal.gif" var bild_menue_offen = "offen.gif" var bild_menue_geschlossen = "geschlossen.gif" var bild_breite = 12 var bild_hoehe = 12 var frame_name = "menuetree" var extra = true var extra_text_expand = "Aufbauen" var extra_text_collapse = "Abbauen" var extra_pre = "<SMALL>" var extra_post = "</SMALL>" var exclusive = false var copyright = true
// === Hilfsfunktionen ===
// Cookie lesen function read_cookie(cookie_name) { var cookie_string = document.cookie var cookie_array = cookie_string.split(";") var array_size = cookie_array.length var cookie_teile
var i = 0
for(i = 0; i < array_size; i++) { cookie_teile = cookie_array[i].split("=") if(cookie_teile[0].substring(0, 1) == " ") cookie_teile[0] = cookie_teile[0].substring(1, cookie_teile[0].length) if(cookie_teile[0] == cookie_name) return unescape(cookie_teile[1]) }
return "" }
// Cookie schreiben function write_cookie(cookie_name, cookie_wert, gueltigkeitszeitraum) { if(gueltigkeitszeitraum) { var ablauf_datum = new Date()
ablauf_datum.setTime(ablauf_datum.getTime() + gueltigkeitszeitraum) document.cookie = cookie_name + "=" + escape(cookie_wert) + "; " + "expires=" + ablauf_datum.toGMTString() } else document.cookie = cookie_name + "=" + escape(cookie_wert) }
// Knoten ermitteln function set_nodes() { var i
for(i = 0; i < (eintraege.length - 1); i++) if(eintraege[i + 1].level > eintraege[i].level) { eintraege[i].node = true eintraege[i].open = false } }
// Aufnahme eines neuen Menueeintrags function neuer_eintrag(level, name, url, target, desc, image, image_open) { this.level = level this.name = name this.url = url this.target = target this.node = false this.open = false this.description = desc this.image = image this.image_open = image_open }
// Eintrag vornehmen und Verzweigungsermittlung function eintrag(level, name, url, target, desc, image, image_open) { var pos = eintraege.length
if(level < 1) { alert("Level-Werte bitte ab 1 anlegen!") return }
if(arguments.length < 2) { alert("Es muessen mindestens die ersten beiden Argumente angegeben werden.") return }
eintraege[pos] = new neuer_eintrag(level, name, (arguments.length > 2) ? url : null, (arguments.length > 3) ? target : null, (arguments.length > 4) ? desc : null, (arguments.length > 5) ? image : null, (arguments.length > 6) ? image_open : null) }
// Untermenue oeffnen oder schliessen function submenue(nr) { // Alle Untermenues schliessen (ausser nr) function close_submenues(nr) { var i for(i = 0; i < eintraege.length; i++) if((i != nr) && eintraege[i].node) eintraege[i].open = false }
// Untermenue nr exklusiv oeffnen function open_submenues(nr) { function open_super_level(nr, lvl) { if((nr == 1) || (lvl < 1)) return
var i for(i = nr - 1; i >= 0; i--) { if((eintraege[i].level == lvl) && eintraege[i].node) { eintraege[i].open = true open_super_level(i, lvl - 1) return } } return }
open_super_level(nr, eintraege[nr].level - 1) }
eintraege[nr].open = !eintraege[nr].open if((eintraege[nr].target != null) && (eintraege[nr].url != null)) frames[eintraege[nr].target].location.href = eintraege[nr].url if(eintraege[nr].open && exclusive) { close_submenues(nr) open_submenues(nr) } write_menue() }
// Alle Untermenues oeffnen function expand() { var i
for(i = 0; i < eintraege.length; i++) if(eintraege[i].node) eintraege[i].open = true write_menue() }
// Alle Untermenues schliessen function collapse() { var i
for(i = 0; i < eintraege.length; i++) if(eintraege[i].node) eintraege[i].open = false write_menue() }
// Kommentar in der Statuszeile anzeigen function show(comment) { status = comment }
// Kommentar aus der Statuszeile entfernen function hide() { status = "" }
// Ausgabe eines Menueeintrags function ausgabe(nr) { with(self[frame_name].document) { var i var tag_a_anfang = "" var tag_a_ende = "" var tags_pre = "" var tags_post = "" var tag_img = "" var titel = "" var bild = ""
write("<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">\n<TR ALIGN="LEFT" VALIGN="CENTER">\n<TD>")
// Platzhalter if(eintraege[nr].level > 1) write("<IMG SRC="leer.gif" WIDTH="" + String(bild_breite * (eintraege[nr].level - 1)) + "" HEIGHT="" + String(bild_hoehe) + "" BORDER="0" ALT="">")
tag_a_ende = "</A>"
// Untermenues / normaler Eintrag if(eintraege[nr].node) { titel = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name bild = eintraege[nr].open ? (eintraege[nr].image_open ? eintraege[nr].image_open : bild_menue_offen) : (eintraege[nr].image ? eintraege[nr].image : bild_menue_geschlossen)
tags_pre = menue_pre tags_post = menue_post tag_a_anfang = "<A " + "HREF="javascript:parent.submenue(" + String(nr) + ")" " + "onMouseOver="parent.show('" + titel + "'); return true" " + "onMouseOut="parent.hide()" " + "TITLE="" + titel + """ + ">"
} else { titel = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name bild = eintraege[nr].image ? eintraege[nr].image : bild_eintrag
tags_pre = eintrag_pre tags_post = eintrag_post tag_a_anfang = "<A " + "HREF="" + eintraege[nr].url + "" " + "onMouseOver="parent.show('" + titel + "'); return true" " + "onMouseOut="parent.hide()" " + (eintraege[nr].target ? (" TARGET="" + eintraege[nr].target + "" ") : "") + "TITLE="" + titel + """ + ">"
}
tag_img = "<IMG " + "SRC="" + bild + "" " + "WIDTH="" + String(bild_breite) + "" " + "HEIGHT="" + String(bild_hoehe) + "" " + "BORDER="0" " + "NAME="" + bildname + String(nr) + "" " + "ALT="" + titel + """ + ">"
write(tag_a_anfang + tag_img + tag_a_ende) write("</TD>\n<TD>") write(tag_a_anfang + tags_pre + eintraege[nr].name + tags_post + tag_a_ende)
writeln("</TD>\n</TR>\n</TABLE>")
} }
// Ausgabe aller Eintraege eines Levels und eines Untermenues function ausgabe_eintraege(lvl, start) { var i
with(self[frame_name].document) { for(i = start; i < eintraege.length; i++) { if(eintraege[i].level < lvl) return if(eintraege[i].level == lvl) { ausgabe(i) if(eintraege[i].node) if(eintraege[i].open) ausgabe_eintraege(lvl + 1, i + 1) } } } }
// Menuedokument schreiben (dynamisches Dokument erzeugen) function write_menue() { with(self[frame_name].document) { open("text/html", "replace")
// Kopf writeln("<HTML>\n<HEAD>\n<TITLE>Menü</TITLE>") writeln("<!--\n\nGeneriert mit Hilfe des Menueskripts\nvon Dietmar Rabich, Duelmen.\n\nhttp://www.rabich.de\n\n-->") writeln("<META NAME="AUTHOR" CONTENT="Dietmar Rabich">") writeln("<META NAME="COPYRIGHT" CONTENT="Dietmar Rabich, Dülmen">") writeln("<META NAME="ROBOTS" CONTENT="NONE">") writeln("<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=iso-8859-1">") writeln("<STYLE TYPE="text/css">\n<!--") if(!a_underline) writeln("A {text-decoration: none;}") writeln("A:hover {color: #" + body_hover + ";}") if(menue_style != "") writeln("BODY, A, P, TD, H1, H2, H3, H4, H5, H6 {" + menue_style + "}") writeln("//-->\n</STYLE>") writeln("</HEAD>")
// Koerper writeln("<BODY BGCOLOR="#" + body_bgcolor + "" TEXT="#" + body_text + "" LINK="#" + body_link + "" ALINK="#" + body_alink + "" VLINK="#" + body_vlink + "" LEFTMARGIN="" + rand + "" TOPMARGIN="" + rand + "" MARGINWIDTH="" + rand + "" MARGINHEIGHT="" + rand + """ + (((body_background != "") && (body_background != null)) ? (" BACKGROUND="" + body_background + """) : "" ) + ">") if(menue_titel != "") writeln(menue_titel) write("<P>") ausgabe_eintraege(1, 0) writeln("</P>") if(extra) { write("<P ALIGN="CENTER">" + extra_pre) if(!exclusive) write("<NOBR>[ <A HREF="javascript:parent.expand()" TITLE="" + extra_text_expand + "">" + extra_text_expand + "</A> ]<WBR></NOBR> ") write("<NOBR>[ <A HREF="javascript:parent.collapse()" TITLE="" + extra_text_collapse + "">" + extra_text_collapse + "</A> ]<WBR></NOBR>") writeln(extra_post + "</P>") } if(copyright) { write("<HR SIZE="2" WIDTH="90%" ALIGN="CENTER" COLOR="" + body_text + "">\n<P ALIGN="CENTER"><SMALL><SMALL>") write("Copyright © 2000 by <A HREF="http://www.rabich.de/" TARGET="_blank">Dietmar Rabich</A>, Dülmen.<BR>") write("Alle Rechte vorbehalten.") writeln("</SMALL></SMALL></P>") } writeln("</BODY>") writeln("</HTML>")
close() }
// Menues in Cookie merken if(rebuild) { var s = "" var i
for(i = 0; i < eintraege.length; i++) if(eintraege[i].node) if(eintraege[i].open) s += ((s == "") ? "" : ",") + String(i) write_cookie("OpenNodes", s, 1000 * 60 * 60 * 24 * 92) } }
// === Menuefunktionen ==
// Ausgabe des kompletten Menues function menue() { set_nodes()
// Menues/Cookie auswerten if(rebuild) { var s = read_cookie("OpenNodes") var sarr = s.split(",") var i var nr
for(i = 0; i < sarr.length; i++) { nr = parseInt(sarr[i]) if(!isNaN(nr)) if(eintraege[nr].node) eintraege[nr].open = true } }
write_menue() }
// Menue mit IDs oeffnen function oeffne_menue_pfad(ids) { set_nodes()
var sarr = ids.split(",") var i var nr
for(i = 0; i < sarr.length; i++) { nr = parseInt(sarr[i]) if(!isNaN(nr)) if(eintraege[nr].node) eintraege[nr].open = true }
write_menue() }
// === EOF ===
Hallo,
hab mir auch ein Javamenü aus dem internet geholt (von http://skripte.rabich.de/skripte/anwendungen/menue.html)
leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?
1. das ist kein java, sondern ein Javascript Menue
2. für das Geschwindigkeitsproblem dürfte in erster Linie das Gedudel verantwortlich sein (flash?).
3. Vor Du irgend etwas anderes versuchst: Befasse dich erst einmal mit dem Aufbau von html Seiten, und insbesondere mit dem Aufbau der Framedefinition. Die ist so wirr, daß es an ein Wunder grenzt, daß die Seite überhaupt angezeigt wird. Hilfestellung dazu: SELFHTML
Und wenn Du nicht weiterkommst: hier im Forum wirst Du geholfen - aber sicher erst, wenn Du dich um obige Punkte ernsthaft bemühst.
Gruß Fritz
hi,
hab mir auch ein Javamenü aus dem internet geholt
java ist immer noch nicht das gleich wie javascript.
leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?
was soll die bandbreite des anfordernden users mit der geschwindigkeit zu tun haben?
wenn dein menü aus zu viel code besteht, dann kürze entsprechend, oder verwende ein anderes.
(setTimeout o.ä. kann ich darin jetzt nicht erkennen ...)
un deinen kompletten code hier zu posten fällt auch nur unter "zumüllen" des forums, es hilft dir wohl kaum weiter - lies mal </faq/#Q-07c>, anfang zweiter abschnitt.
gruss,
wahsaga
Hallo,
wie Fritz schon sagte: die Musik ist es. Das JS-menü (und die Seite) würden ohne Musik nicht nur schneller, sondern auch besser.
Ansonsten zur Warnung: wie sind hier ein Verein von Selbermachern. Beim selbermachen helfen wir gerne, dazu gehört natürlich auch ab und an mal das rumspielen und rumtesten fertiger Scripte dritter. Aber ein komplettes Script dritter anaylisieren wir eher nicht.... Dein Problem dürfte aber mit der Entfernung der Musik eh gelöst sein....
Chräcker