Avatar billede dannyboy Nybegynder
25. april 2001 - 11:51 Der er 16 kommentarer og
1 løsning

Layer problemer i NS6

Jeg har fundet nogle kodestumper som jeg prøver at lave et galleri med layers ud af.

Det virker i IE og den gamle NS (4.76) men ikke i den nye NS 6.01.

URL til galleriet:
http://www.vangberg.dk/gallery

Kildekode:

<html>
<head>
<title>Layer-Gallery</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">


<script language=\"JavaScript\">
<!--
function MM_findObj(n, d) { //v3.0
  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[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

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


<style type=\"text/css\">

.border {
border-bottom : solid 1px;
border-left : solid 1px;
border-right : solid 1px;
border-top : solid 1px;
border-color : #000000;}
}

</style>

</head>

<body bgcolor=\"#cccccc\">


<table align=left width=100% height=100% border=0 cellspacing=0 cellpadding=0>

<tr>
<td width=50%>
   
<div id=\"pic1\" style=\"position:absolute; width:200px; height:200px; z-index:1; top: 200px; left: 200px; visibility: visible\">
<img src=\"large_pic1.gif\" class=border border=\"0\" width=\"200\" height=\"200\" align=\"bottom\" alt=\"\">
</div>
     
     
<div id=\"pic2\" style=\"position:absolute; width:200px; height:200px; z-index:1; top: 200px; left: 200px; visibility: hidden\">
<img src=\"large_pic2.gif\" class=border border=\"0\" width=\"200\" height=\"200\" align=\"bottom\" alt=\"\">
</div>
 
   
<div id=\"pic3\" style=\"position:absolute; width:200px; height:200px; z-index:1; top: 200px; left: 200px; visibility: hidden\">
<img src=\"large_pic3.gif\" class=border border=\"0\" width=\"200\" height=\"200\" align=\"bottom\" alt=\"\">
</div>


<div id=\"pic4\" style=\"position:absolute; width:200px; height:200px; z-index:1; top: 200px; left: 200px; visibility: hidden\">
<img src=\"large_pic4.gif\" class=border border=\"0\" width=\"200\" height=\"200\" align=\"bottom\" alt=\"\">
</div>

</td>


<td valign=middle>

<table align=center border=0 cellspacing=10 cellpadding=10>

<tr>
<td align=center>
<img src=\"small_pic1.gif\" class=border width=\"50\" height=\"50\" border=0 onmousedown=\"MM_showHideLayers(\'pic1\',\'\',\'show\',\'pic2\',\'\',\'hide\',\'pic3\',\'\',\'hide\',\'pic4\',\'\',\'hide\')\">
</td>



<td align=center>
<img src=\"small_pic2.gif\" class=border width=\"50\" height=\"50\" border=0 onmousedown=\"MM_showHideLayers(\'pic1\',\'\',\'hide\',\'pic2\',\'\',\'show\',\'pic3\',\'\',\'hide\',\'pic4\',\'\',\'hide\')\">
</td>
</tr>
         
<tr>
<td align=center>
<img src=\"small_pic3.gif\" class=border width=\"50\" height=\"50\" border=0 onmousedown=\"MM_showHideLayers(\'pic1\',\'\',\'hide\',\'pic2\',\'\',\'hide\',\'pic3\',\'\',\'show\',\'pic4\',\'\',\'hide\')\">
</td>



<td align=center>
<img src=\"small_pic4.gif\" class=border width=\"50\" height=\"50\" border=0 onmousedown=\"MM_showHideLayers(\'pic1\',\'\',\'hide\',\'pic2\',\'\',\'hide\',\'pic3\',\'\',\'hide\',\'pic4\',\'\',\'show\')\">
</td>
</tr>
   

</table>
         
</td>
</tr>
</table>


</body>
</html>
Avatar billede hoejrup Nybegynder
25. april 2001 - 11:56 #1
Layers er ved at blive udfaset i de nye browser versioner.

/per
Avatar billede hoejrup Nybegynder
25. april 2001 - 12:02 #2
Link: http://maccentral.macworld.com/storyforum/forums/_news_0011_14.netscape/?read=111

The LAYER tag is a proprietary kludge that was never in any W3C standard. Netscape recognized this and told us OVER A YEAR AGO that they
were going to eliminate it.

/per
Avatar billede dannyboy Nybegynder
25. april 2001 - 12:10 #3
Ok, jeg forstår. Men er der så et alternativ?
Avatar billede hoejrup Nybegynder
25. april 2001 - 12:23 #4
Det er faktisk et godt spørgsmål, men jeg har ikke undersøgt det på nuværende tidspunkt.

/per
Avatar billede hoejrup Nybegynder
25. april 2001 - 12:27 #5
Hvis du anvender samme link, som jeg henviser til. Så er der en løsning her:

The layer tag is *unnecessary*. The same functionality is available from standard XHTML.

/per
Avatar billede olebole Juniormester
25. april 2001 - 12:41 #6
<ole>
Du kan ikke bruge den DreamWeaver funktion, der hedder \'MM_findObj()\'. Den understøtter ikke den \'ny\' DOM. I stedet for \'document.layers\' skal der bruges \'document.getElementById\' til NS6 - hvilket man faktisk har burdet bruge til IE5, siden den kom på markedet ;)
/mvh
</bole>
Avatar billede dannyboy Nybegynder
25. april 2001 - 13:06 #7
Ole, er du ikke rar at omskrive disse functions til den du omtaler?

<script language=\"JavaScript\">
<!--
function MM_findObj(n, d) { //v3.0
  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[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v==\'show\')?\'visible\':(v=\'hide\')?\'hidden\':v; }
    obj.visibility=v; }
}
//-->
</script>
Avatar billede olebole Juniormester
25. april 2001 - 15:07 #8
Det er for den sags skyld kun den første, der skal skrives om. Det bliver ikke mig, da jeg synes DW-koder skodder for meget. Så skulle jeg skrive en ny - men jeg har ikke tid lige nu ;)
/mvh
Avatar billede engrob Nybegynder
25. april 2001 - 22:29 #9
hoejrup>> Det du snakker om er jo selve <layer> tagget. Det har IE aldrig kunnet finde ud af, men dannyboy har brugt <div> så DET er ikke noget problem.
Avatar billede hoejrup Nybegynder
26. april 2001 - 09:17 #10
engrob>> Vi snakker om hvad der virker i NS 6.01.

/per
Avatar billede olebole Juniormester
26. april 2001 - 09:46 #11
hoejrup >> Netop - og derfor har engrob også ret ;)
Der er ikke brugt nogen tags i dannyboy\'s eksempel, NS6+ ikke forstår...ingen <layer>-tags overhovedet. Jeg tror, du blander nogen ting sammen.
/mvh
Avatar billede hoejrup Nybegynder
26. april 2001 - 10:42 #12
olebole> Ok
Avatar billede olebole Juniormester
26. april 2001 - 11:29 #13
For nu at være lidt mere konstruktiv, så er det, der er galt, at script\'et henviser til \'document.layers\', som i NS4.x er et array, der indholder alle containere - såsom: <layer>, <div>, <span> osv. - på siden, HVIS de er positioneret \'absolute\'.
Dette array eksisterer ikke længere i NS6+, da det ikke er med i W3C\'s standard for Document Object Model.

I stedet kan man bruge f.eks: document.getElementsByTagName(\"DIV\").length, som så giver dig antallet af <div>s på siden. Derefter kan man igen bladre sig igennem disse containere og manipulere dem ;)
/mvh
Avatar billede dannyboy Nybegynder
26. april 2001 - 16:27 #14
Kunne I ikke have brugt lidt af energien til at poste en løsning, i stedet for at mundhugge?
Avatar billede engrob Nybegynder
26. april 2001 - 17:18 #15
Jo, her får du en jeg tog fra en side
function MM_findObj(n, d) { //v4.0
  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[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

Det er vel fra dreamweaver 4
Avatar billede dannyboy Nybegynder
27. april 2001 - 11:36 #16
fino, nu virker det faktisk også i NS6!
engrob du skulle have lavet det som ey svar.
Avatar billede engrob Nybegynder
28. april 2001 - 12:32 #17
Så kommer der da lige et her!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester