• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Visibility-Steuerung von div-Ebenen

Siggi

New member
Ich möchte in einer Website mit div-Ebenen die Sichtbarkeit der Ebenen mittels JavaScript steuern. Bedingung ist, dass das Ganze auch mit dem Netscape 4.7 noch funktioniert.
Für den IE ist das Ansprechen der div-Ebenen über die ID problemlos möglich,
also z.B. window.document.[div-IDName].style.visibility

Das funktioniert nicht im Netscape. Er kann mit dem div-IDNamen nichts anfangen. Für die neueren Browser kann man ja nun die DOM-Methode getElementById nutzen, wo dann allerdings der Netscape 4.7 frustriert aufgibt.
welche Möglichkeit gibt es, die div-Ebenen im Netscape 4.7 anzusprechen?

Danke schon im Voraus für Eure Mühe

Gruß Siggi
 
das hatten wir schon im forum

Zitat:

function showLayer(id)
{
if (document.getElementById) ebene=document.getElementById(id).style
else if (document.layers) ebene=document.layers[id]
else if (document.all) ebene=document.all[id].style;
ebene.visibility="visible";
}

analog mit hidden
 
Vielen Dank, Lethe, für die schnelle Reaktion. Hatte in der Suchen-Funktion leider nichts passendes gefunden.

Das Script scheint mir allerdings nicht für den Netscape 4.7 nutzbar zu sein, da die Ebenen ja mit dem <div>-Tag erstellt wurden.

1. document.getElementById() funktioniert nur in neuerne Browsern
2.document.layer ist nur vorhanden, wenn die Ebenen mit dem Netscape <layer>-Tag erstellt wurden - ist hier nicht der Fall
3.document.all versteht nur der IE4+, der Netscape 4.7 nicht.

Das heißt, daß der Netscape 4.7 auf keine der Möglichkeiten des Scriptes anspricht.

Also was tun? ;)
 
also, grundsätzlich funktioniert das div schon ab ns 3.0, du kannst nur nicht alle zauberkunststückchen damit machen.

ist es bei deiner seite nicht möglich, die ebenendefinition für ns47 mit <layer> zu erweitern? ich meine, layer und ns4x ist doch beinahe schon eine sprichwörliche einheit. ansonsten fällt mir auf die schnelle nur ein, eine eigene ns47-seite zu erstellen (aber eben auch da mit layer) und einen browsersniffer vorzuschalten
 
Zuletzt bearbeitet:
Ja, scheint tatsächlich so zu sein, dass man div-Ebenen unter Netscape 4.7 nicht ansprechen kann und ich in der Website die Ebenen zusätzlich noch mit dem <layer>-Tag erstellen muß.

Schade, hatte gehofft mir diese Arbeit ersparen zu können. Ich dachte, mich erinnern zu können, daß ich mit Dreamweaver schon Seiten mit div-Ebenen und mit der Funktion des Ein- und Ausblendens der Ebenen erstellt hatte. Dreamweaver hat das per JavaScript geregelt ohne die Ebenen mit layer zu erstellen.
Ich komme in dem kryptischen Dreamweaver Script allerdings nicht nach, wie das funktioniert.

Gruß Siggi
 
Also DIVs lassen sich sehr wohl in NN 4.7 ansprechen.... frag mich aber ned wie ;)

Da Du mit DreamWeaver arbeitest sollte das kein Problem sein, denn DW hat ein Skript namens MM_findObj, das findet so ziemlich alles anhand des Namens heraus. Eben auch Divs im NN 4.7...
Außerdem gibt es auch Show/Hide Layer Behaviours, die Dir das Versteckeln und Anzeigen total easy per Dialog ermöglichen.....
 
Genau Albu,

Das dachte ich eben auch. Und ich würde das Ein- und Ausblenden der Ebenen auch gerne Dreamweaver überlassen.
Doch ist dieses Ein- und Ausblenden in meiner Seite von bestimmten Bedingungen abhängig.
Da gibt Dreamweaver spätestens auf. Hier hilft nur selbst programmieren. Und die Dreamweaver-Scripte mit eigenen JavaScripten zu variieren ist eine große Unsicherheit. Hier gilt "Entweder-Oder".
Trotzdem vielen Dank für Deinen Tip.

Gruß Siggi
 
Warum schaltest Du nicht Deine Bedingungen vor die MM Skripte??

etwa so:
if (Bedingung1)
{
mm_showHideLayers (......., true)
}
else
{
mm_showHideLayers (......., false)
}

oder wie auch immer...

sollte das auch nicht die Erleuchtung bringen, dann poste doch mal Deine Bedingungen
 
Hallo Albu,

Habe mich ,zugegeben, schlecht ausgedrückt. Nachfolgend ein Beispiel einer einfachen HTML-Seite, die das Problem aufzeigt.
Vier übereinanderliegende Ebenen ("Layer1...Layer4"). Auf "Layer5" die beiden Navigationslinks "up" und "down" ("down" ist derzeit noch nicht mit einer Aktion belegt)
"up" soll bei jedem Click jeweils die nächst höhere Ebene einblenden und alle anderen ausblenden - bis zur 4. Ebene. "down" soll dann das Ganze in umgekehrter Richtung steuern.

In Dreamweaver kannst Du einen Link ja nur einmal mit der Funktion "showLayer" verknüpfen, da für onClick konkrete Parameter übergeben werden. Eine Zählvariable kann man da nur schwerlich berücksichtigen.

Hier der Seitencode:

<tml>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!--
var zaehler = 0;
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v3.0
if
var i,p,v,obj,args=MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }
}
//-->
</script>
</head>

<body bgcolor="#FFFFFF" text="#000000">

<div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; background-color: #FF0000; layer-background-color: #FF0000; border: 1px none #000000; visibility: visible"></div>
<div id="Layer2" style="position:absolute; width:200px; height:115px; z-index:2; background-color: #00FF00; layer-background-color: #00FF00; border: 1px none #000000; visibility: hidden"></div>
<div id="Layer3" style="position:absolute; width:200px; height:115px; z-index:3; background-color: #0000FF; layer-background-color: #0000FF; border: 1px none #000000; visibility: hidden"></div>
<div id="Layer4" style="position:absolute; width:200px; height:115px; z-index:4; background-color: #FFFF00; layer-background-color: #FFFF00; border: 1px none #000000; visibility: hidden"></div>
<div id="Layer5" style="position:absolute; width:200px; height:115px; z-index:5; left: 52px; top: 327px">
<p><a href="#" onClick="MM_showHideLayers('Layer1','','hide','Layer2','','show','Layer3','','hide','Layer5','','show')">up</a></p>
<p><a href="#">down</a></p>
</div>
</body>
</html>

Danke für Deine Mühe

Gruß Siggi
 
Zuletzt bearbeitet:
Also daß das direkt in DW so nicht geht, da stimme ich Dir zu. Allerdings kannst Du durchaus die DW Funktionen benutzen, nur mußt Du eben ein "Custom" Script vorschalten:

PHP:
nState = 4;

function doUp ()
{
  nState--;
  if (nState <= 0)
  {
     nState = 1;
  }
  doUpdate ();
}

function doDown ()
{
  nState+;
  if (nState > 4)
  {
     nState = 4;
  }
  doUpdate ();
}

function doUpdate ()
{
  switch (state)
  {
    case 3:
      MM_showHideLayers('Layer1','','hide','Layer2','','hide','Layer3','','show','Layer4','','hide');
      break;
    case 4:
      MM_showHideLayers('Layer1','','hide','Layer2','','hide','Layer3','','hide','Layer4','','show');
      break;
  }
}

jetzt kannst Du im onLoad vom body ein doUpdate (); aufrufen und auf den Buttons up und down entsprechend doUp und doDown.....

(doUpdate muß natürlich noch weiter ausgebaut werden...)

Das Ganze ist jetzt ausm Stehgreif gecoded und dementsprechend ungetestet!
 
Klar Albu,

Eine einfache und solide Lösung des Problems. Manchmal sieht man den Wald vor Bäumen nicht.
Habe Deine Anregung gleich umgesetzt und klappt natürlich absolut zuverlässig.

Reizen würde mich allerdings die DW-Lösung nachvollziehen zu können. Ich komme nicht dahinter, auf welcher Grundlage DW in seinem Script die div-Ebenen für Netscape 4.7 ansprechbar macht. Das DW-Script ist für mich nicht zu ergründen.

Also nochmals vielen Dank für Deine effektive Hilfe.

Gruß Siggi
 
Zuletzt bearbeitet:
Hallo!

Also bei Netscape kannst du die Visibility von divs folgerndermassen ändern:

PHP:
function hideNS(layerName)
{
    document[layerName].visibility="hide";
}

function showNS(layerName)
{
    document[layerName].visibility="show";
}

Jetzt einfach hideNS("LayerName") aufrufen um den Layer 'LayerName' auf unsichtbar zu setzen und showNS("LayerName") zum sichtbar machen.
 
Hallo Comet,

Das ist genau die Ideallösung, die ich gesucht habe. Dadurch kann ich es vermeiden, eigenen mit dem kryptischen DW-Code zu mischen und habe saubere und durchschaubare Scripts.
Hab's sofort getestet - funktioniert tadellos.

Es ist immer wieder erstaunlich, daß man so schwer an doch eigentlich solch einfache Lösungen herankommt, trotz vieler JavaScript-Bücher und Postings.

Herzlichen Dank Comet for your help!

Gruß Siggi
 
Zuletzt bearbeitet:
Zurück
Oben