05. juni 2001 - 11:23Der er
8 kommentarer og 1 løsning
Forklaring af layer
Er der et klogt hoved som kan forklare mig hvordan følgende kode fungerer??
}
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; } }
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; }
Jeg ved godt hvad koden gør, men ikke hvordan den fungerer.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<Ole> Hmmm...jeg har prøvet at stille dem lidt anderledes op...det kan være, det hjælper.
======================================================================= Denne funktion kaldes f.eks. med: onclick=\"MM_showHideLayers(\'mitLagsId\', \'\', \'show\')\". Eller i serier: onclick=\"MM_showHideLayers(\'mitLagsId\', \'\', \'show\', \'mit2LagsId\', \'\', \'hide\')\"...altid i serier af tre argumenter, hvor jeg ikke ved, hvad det midterste skal...?!? Funktionen skal kunne tænde og slukke for lag uafhængigt af hinanden og i et tilfældigt antal ad gangen. Funktionen gør brug af funktionen \'MM_findObj()\' til at definere selve lag-objektet udfra lagets id og evt. frames-nestning. Man kan åbenbart kalde således: onclick=\"MM_showHideLayers(\'mitLagsId?mitFrameNavn\', \'\', \'show\');\" ...hvor frames-nestningen sættes i search-strengen (eller query-strengen). Det betyder altså: Tænd mit lag \'mitLagsId\', der ligger i rammen \'mitFrameNavn\'. -----------------------------------------------------------------------
function MM_showHideLayers() { //v3.0
var i,p,v,obj; // De variabler, vi vil bruge erklæres her
var args = MM_showHideLayers.arguments; // Et array af de argumenter, der blev sendt med kaldet til funktionen
for (i=0; i<(args.length-2); i+=3) { // Vi tæller array\'et igennem - tre elementer ad gangen if ((obj=MM_findObj(args[i]))!=null) { /* Hvis et kald til \'MM_findObj()\' - med første element i array\'et som argument - returnerer et objekt, sættes \'v\' til det tredie element i array\'et (f.eks: \'visible\') */ v=args[i+2]; if (obj.style) { // Hvis objektet (laget) har en style-property (kun i IE og NS6), så.... obj=obj.style; // sættes variablen \'obj\' lig med objektets style-property } if (v==\'show\') { // Hvis tredie element i array\'et var \'show\', sættes \'v\' til \'visible\' v = \'visible\'; } else if (v=\'hide\') { // Hvis tredie element i array\'et var \'hide\', sættes \'v\' til \'hidden\' v = \'hidden\'; } else { // Ellers sættes \'v\' til, hvad det var (\'hidden\' eller \'visible\') v = v; } obj.visibility = v; // Objektets style-property får tildelt værdien af \'v\' } }
}
======================================================================= Denne funktion returnerer et objekt i form af f.eks. et <div>, <span> eller <form>. Jeg vil umiddelbart mene, at linien: \'x = document.getElementById(n);\' er forkert. Der burde have stået: \'x = d.getElementById(n);\', hvis også NS6 skal have en chance for at finde laget i et frameset. Du kan hilse MacroMedia og sige, at de har lavet et buggy script i forsøget på at optimere for NS6 (og IE5, der også vil falde i her og lave fejl, selvom \'x\' blev sat korrekt ved \'document.all\'). Jeg skal lige sige, at denne påstand ikke er efterprøvet - men jeg er meget sikker! ;o) -----------------------------------------------------------------------
function MM_findObj(n, d) { //v4.0
var p,i,x; // De variabler, vi vil bruge erklæres her
if (!d) { // Hvis kun der var ét argument i kaldet til funktionen d = document; // sættes \'d\' lig med \'document\' }
/* Hvis argumentet (strengen) \'n\' indeholder \'?\' og siden indeholder frames, sættes \'d\' lig med \"parent.frames[det efter \'?\' i strengen \'n\'].document\" - og \'n\' sættes lig det før \'?\'. */ if ((p = n.indexOf(\"?\"))>0 && parent.frames.length) { d = parent.frames[n.substring(p+1)].document; n = n.substring(0,p); }
/* Hvis ikke der kan kaldes med: \"parent.frames[det efter \'?\' i strengen \'n\'].document[det før \'?\' i strengen \'n\']\" eller: \"document[det før \'?\' i strengen \'n\']\" - og browseren samtidig forstår \'document.all\' (er IE) - sættes \'x\' lig med \"parent.frames[det efter \'?\' i strengen \'n\'].document.all[det før \'?\' i strengen \'n\'] eller document.all[det før \'?\' i strengen \'n\']. */ if (!(x=d[n]) && d.all) { x = d.all[n]; }
/* Hvis intet \'x\' er sat, bladrer vi sidens (evt. i frameset) forms igennem. Støder vi på én, der hedder \"det efter \'?\' i strengen \'n\'\", sættes \'x\' lig dette form-objekt. */ for (i=0; !x&&i<d.forms.length; i++) { x = d.forms[i][n]; }
/* Hvis intet \'x\' er sat, bladrer vi sidens (evt. i frameset) layers igennem (kun NS4.x). Vi kalder funktionen selv med argumenterne: \"det før \'?\' i strengen \'n\'\" og \"parent.frames[det efter \'?\' i strengen \'n\'].document.layers[et ad gangen].document\" ...eller: \"det før \'?\' i strengen \'n\'\" og \"document.layers[et ad gangen].document\" Det gør vi i håb om så at kunne få sat et \'x\'. */ for (i=0; !x&&d.layers&&i<d.layers.length; i++) { x = MM_findObj(n,d.layers[i].document); } /* Hvis der stadig ikke er sat en værdi på \'x\' og browseren forstår \'document.getElementById()\' (IE5 og NS6), sættes \'x\' lig med document.getElementById(det før \'?\' i strengen \'n\') */ if (!x && document.getElementById) { x = document.getElementById(n); } return x; // Vi returnerer \'x\' til funktionen, der spurgte. }
ehhhh....i den første funktion skrev jeg: obj.visibility = v; // Objektets style-property får tildelt værdien af \'v\' Der burde have stået: \"Objektets style-property får tildelt værdien af \'v\', hvis browseren ikke er NS4.x. I så fald tildeles objektets visibility-property værdien af \'v\'\". På overfladen måske en mindre fejl, men kun på overfladen ;o) /mvh
Jamen, det var da herligt :o) Jeg tror nu, der er mange, der gerne vil se dem \'krøllet\' ud og forklaret. Jeg har indtryk af, at mange ikke kan strikke om på DW-funktioner, fordi de er lidt kompakt skrevet...det kunne være, man skulle gemme et bookmark i baglommen ;o) /mvh
Hmm, jeg synes bare jeg har set det i DW. Underligt... Tror du egentlig det er lavet på den måde for at få det til at virke bedre sammen med programmet eller er det fordi folk ikke skal kunne gennemskue koden lige med det samme?
Altså, det er jo to temmelig små scripts, så det er ikke så meget, man sparer i download ved at komprimere dem. Så skal man op i de lidt større \'møgerter\'.
De er jo lavet til et WYSIWYG-program, hvor det ikke er meningen, at folk skal \'pille\' i koden - og så ser det meget pænt ud med en lille kodeblok. Det er nok mest det, for der er ikke noget epokegørende i dem, overhovedet. Derfor er der heller ikke noget at \'gemme\'. /mvh
Nææ, men i deres timeline og movelayer scripts har de skrevet copyright ved dem. De er så også en del større.
Synes godt om
Ny brugerNybegynder
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.