mouseOver soll mehrere Layer gleichzeitig öffnen
Jochen
- javascript
Moin moin!
Eins vorweg: ich bin ein ziemlicher JavaScript-Anfänger!!
Es geht um folgendes Problem: eine lokale Präsentation einer archäologischen Ausgrabung umfasst insgesamt 8 HTML-Seiten, auf denen sich jeweils eine große Imagemap befindet. Beim Überfahren der einzelnen areas sollen dann mehrere, zu den einzelnen Punkten gehörende Bilder sichtbar werden und anschließend wieder verschwinden.
Es ist mir auch gelungen, einzelne Layer sichtbar zu machen und wieder verschwinden zu lassen mit der folgenden Methode (Anm: Anwendung braucht nur auf dem IE 5.5 zu laufen!)
ausgelagertes Script (Auszug)
function showeins ()
{ eins.style.visibility="visible";
zwei.style.visibility="visible";}
function hideeins ()
{ eins.style.visibility="hidden";
zwei.style.visibility="hidden";}
wird im HTML-Code aufgerufen durch:
<area shape=rect coords="304,234,447,377" onmouseover="javascript:showeins ()" onmouseout="javascript:hideeins ()" href="#">
was auch funktioniert ("eins" und "zwei" sind die IDs der mittels CSS absolut positionierten Layer).
Da ich aber insgesamt sehr viele Layer auf mehreren Seiten hin- und wieder wegzaubern muss, würde ich gerne einen allgemeineren Ansatz finden. Versucht habe ich es mit einem im Archiv gefundenen Script, das leider nur teilweise funktioniert:
<script language="JavaScript">
<!--
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
v6 = (document.getElementById)? true:false
function showlayer(layerid)
{
if (ns4) document.layers[layerid].visibility = "show"
else if (v6) document.getElementById(layerid).style.visibility = "visible";
else if (ie4) document.all[layerid].style.visibility = "visible"
}
function hidelayer(layerid)
{
if (ns4) document.layers[layerid].visibility = "hide"
else if (v6) document.getElementById(layerid).style.visibility = "hidden";
else if (ie4) document.all[layerid].style.visibility = "hidden"
}
//-->
</script>
und dann den Aufruf durch
<area shape=rect coords="304,234,447,377" onmouseover="javascript:showlayer ('eins','zwei')" onmouseout="javascript:hidelayer ('eins','zwei')" href="#">
Der IE zeigt nur den ersten aufgeführten Layer an; irgendwie rall ich nicht, wie ich dem Script beibiegen kann, zwei und mehr Layer gleichzeitig zu öffnen. Für Füchse vermutlich relativ einfach, für mich aber nicht!
Vielen Dank im Voraus!
Jochen
Moin!
<area shape=rect coords="304,234,447,377" onmouseover="javascript:showlayer ('eins','zwei')" onmouseout="javascript:hidelayer ('eins','zwei')" href="#">
Zuerst mal: In onmouseirgendwas hat das vorne ein "javascript:" nichts zu suchen. Das ist per Definition Javascript, andere Möglichkeiten gibts nicht.
Zweitens: Die Funktionen showlayer und hidelayer sind so definiert, daß sie genau einen Parameter entgegennehmen (layerid), und damit was machen. Da kannst du natürlich nicht einfach daherkommen, und zwei Parameter übergeben.
Entweder du bastelst dir eine kleine Funktion selbst, der du mehrere Parameter übergibst, und die dann ihrerseits entsprechend häufig hidelayer oder showlayer aufruft (immer nur mit einem Parameter), oder du machst dir etwas mehr Tipparbeit und schreibst mehrfach den Aufruf der beiden layer-Funktionen ins onmouseirgendwas (onmouseover="showlayer('eins'); showlayer('zwei');"), oder du modofizierst die layer-Funktionen einfach so, daß sie mehrere Parameter entgegennehmen.
- Sven Rautenberg
Moin!
Danke zunächst einmal für die prompte Antwort!
<area shape=rect coords="304,234,447,377" onmouseover="javascript:showlayer ('eins','zwei')" onmouseout="javascript:hidelayer ('eins','zwei')" href="#">
Zuerst mal: In onmouseirgendwas hat das vorne ein "javascript:" nichts zu suchen. Das ist per Definition Javascript, andere Möglichkeiten gibts nicht.
Sorry; habe ich ab jetzt aber verstanden!!
Zweitens: Die Funktionen showlayer und hidelayer sind so definiert, daß sie genau einen Parameter entgegennehmen (layerid), und damit was machen. Da kannst du natürlich nicht einfach daherkommen, und zwei Parameter übergeben.
Das Problem ist, daß die Anzahl der Parameter unterschiedlich ist; mal werden 2 Fotos, mal vier oder mehr Fotos gezeigt, je nachdem, wie ertragreich die jeweilige Fundstelle war!
Entweder du bastelst dir eine kleine Funktion selbst, der du mehrere Parameter übergibst, und die dann ihrerseits entsprechend häufig hidelayer oder showlayer aufruft (immer nur mit einem Parameter), oder du machst dir etwas mehr Tipparbeit und schreibst mehrfach den Aufruf der beiden layer-Funktionen ins onmouseirgendwas (onmouseover="showlayer('eins'); showlayer('zwei');"),
vermutlich wird darauf hinauslaufen...
»»oder du modofizierst die layer-Funktionen einfach so, daß sie mehrere Parameter entgegennehmen.
Genau daran hapert es ja bei mir, vor allem, weil die Anzahl der zu übergebenden Parameter sich ständig ändert
- Sven Rautenberg
Schönen Abend noch
Jochen
hi,
Zuerst mal: In onmouseirgendwas hat das vorne ein "javascript:" nichts zu suchen. Das ist per Definition Javascript, andere Möglichkeiten gibts nicht.
Sorry; habe ich ab jetzt aber verstanden!!
entweder: href="javascript:void(go())"
oder: onclick="go(); return false;"
Das Problem ist, daß die Anzahl der Parameter unterschiedlich ist; mal werden 2 Fotos, mal vier oder mehr Fotos gezeigt, je nachdem, wie ertragreich die jeweilige Fundstelle war!
dann versuch mal sowas
// some known objects to identify nc4x and ie4
var nc = !!(document.captureEvents && !document.getElementById);
var ie4 = !!(document.all && !document.documentElement);
// einfache div-layer referenzieren
function dRefS(num) {return (nc? document.layers[num] : (ie4? document.all[num].style : document.getElementById(num).style))}
// show
function on() {
for(var i = 0; i < arguments.length; i++) {
dRefS(argument[i]).visibility = "visible";
}
}
das ganze kannst Du mit beliebig vielen Parametern rufen (Layer-ID als String):
on("layer1","layer2","layer3");
hth
Gruesse Joachim
hi,
kleiner Tippfehler:
dRefS(argument[i]).visibility = "visible";
dRefS(arguments[i]).visibility = "visible";
hth + Gruss Joachim
hi,
kleiner Tippfehler:
dRefS(argument[i]).visibility = "visible";
dRefS(arguments[i]).visibility = "visible";
hth + Gruss Joachim
Das hört sich doch genau nach dem an, was ich suche; leider komme ich heute abend nicht mehr zum Testen. Trotzdem Dank
Jochen