Avatar billede baitianlong Nybegynder
07. august 2004 - 21:15 Der er 8 kommentarer og
1 løsning

Overforbrug af funktioner ?

Jeg har kigget på en side her:

www.czartoryski.com

På hver eneste af "undersiderne" er der et hav af vildt avancerede javascript funktioner, men de bliver aldrig kaldt. DVS på forsiden bliver to af dem godt nok kaldt med show/hide layer, men resten er da det rene overflødige volapyk...

Eller er det mig, der er galt på den ?

Prøv at kigge på sourcen for de forskellige sider og kommenter venligst.
Avatar billede skovenborg Nybegynder
08. august 2004 - 02:01 #1
mon ikke det er lidt ligesom at bruge en ekstern script-fil, hvor man lægger alle funktioner ind som man bruger på hele siden (eller måske kommer til at bruge).

Denne side her har åbenbart ikke lige tænkt på at lægge det ind i en fil for sig selv - men mon ikke også de bruger et form for server-side-include til at sætte javascripten ind. Det er umiddelbart min tolkning af de mange umiddelbart ubrugte funktioner.

Håber det var til lidt hjælp - eller du vil måske vide hvad funktionerne gør???
Avatar billede baitianlong Nybegynder
09. august 2004 - 14:26 #2
Jeg vil gerne høre om det ikke er korrekt at de ikke bruger funktionerne til noget som helst (de kaldes aldrig)... Men hvad de gør, kunne da også være meget interessant at høre lidt om :)
Avatar billede skovenborg Nybegynder
09. august 2004 - 19:11 #3
hvis man kigger lidt på funktionerne viser det sig dog også at de faktisk bliver brugt - bare ikke direkte via en event, men indeni en anden funktion. Det gælder nemlig at P7_getWD, P7_getLDims, MM_findObj og P7_alignRR bliver kaldt indeni funktionen P7_alignWD2 - og denne bliver netop kaldt længere nede via en onmouseover-event. Så de har vist alligevel en god grund til at have dem liggende.
Avatar billede skovenborg Nybegynder
09. august 2004 - 19:13 #4
hva' de lige gør hver for sig kan jeg nu ikke lige se - det er heller ikke særlig nemt stillet op ;-)
Avatar billede baitianlong Nybegynder
11. september 2004 - 02:24 #5
Hvos du vil have lidt for din (ikke så dybdegående) analyse, kan du smide et svar - og vi deler.

Der er vist ikke nogen, der gider kigge de sære scripts igennem. Jeg havde selv set at nogle at dem blev brugt på forsiden, som nævnt.

Jeg undrede mig bare over hvad der lige skete der :)
Avatar billede skovenborg Nybegynder
11. september 2004 - 04:20 #6
jeg har lige kigger funktionerne lidt igennem og lavet "lidt" kommentarer i koden, som du kan læse lidt på (jeg har kun kommenteret to af funktionerne - de andre er kommenteret undervejs hvad de gør. Koden er taget ud fra siden http://www.czartoryski.com/index.html og omhandler det der sker når man sætter musen over billedet:
unction P7_alignRR() { //v2.4 by PVII
var i;
if(!document.p7alignRR) {return;} // Hvis P7_alignWD2() ikke er blevet kaldes endnu
if(document.layers){ // netscape 4
    // Hvis vinduet er blevet resizet siden sidst så opdater siden
    if(innerWidth!=document.p7RRiw || innerHeight!=document.p7RRih){location.reload();}
}
else{
    document.p7RR=1; // Sørger for at når man kører P7_alignWD2 igen så bliver funktionen ikke skrevet én gang til ind i arrayet p7aRR
    for(i=0;i<p7aRR.length;i++){ // Kører igennem p7aRR arrayet og kører de funktioner som står skrevet i den - altså P7_alignWD2 (bliver skrevet fra i P7_alignWD2())
        eval(p7aRR[i]);
    }
    document.p7RR=0; // Sørger for at man kan skrive til p7aRR igen
}
}

//P7_alignWD2('profil',3,580,0); - element er altså den div med id'en 'profil'
function P7_alignWD2() { //v2.4 by PVII
// g = elementet
// gg = elements style-object
// lp = elements position fra venstre (normalt 0)
// tp = elements position fra toppen (normalt 0)
// aL = elements position og dimension
// lh = elements højde
// lw = elements bredde
// ww = vinduets bredde
// wh = vinduets højde
// pa = en enhed, standard er pixel.
// P7_getWD("width"|"height") finder vinduets dimensioner
// MM_findObj(elements id) returnerer et object med en given id
// P7_getLDims(elements id) returnerer et elements dimensioner (position og højde og bredde)
var g,gg,lp=0,tp=0,aL,lh,lw,ww,wh,pa='px',args=P7_alignWD2.arguments;
if(document.layers||window.opera){pa='';} // enhed sættes til ingenting hvis document.layers er i brug eller browseren er opera
for(var i=0;i<args.length;i+=4){ // gennemløber hvert fjerde argument (så den tager i dette tilfælde kun profil med, altså kun elementerne)
    if((g=MM_findObj(args[i]))!=null){ // finder elementet med den givne enhed (første argument) og tester om det findes
        gg=(document.layers)?g:g.style; // gg tildeles style-objectet (findes ikke hos netscape-browseren v4, som kun bruger document.layers)
        mm=parseInt(args[i+1]); // Andet argument (3)
        mr=parseInt(args[i+2]); // Tredje argument (580) - margin fra højre
        ml=parseInt(args[i+3]); // Fjerde argument (0) - margin fra venstre
        ww=parseInt(P7_getWD('width')); // Finder vinduets bredde
        wh=parseInt(P7_getWD('height')); // Finder vinduets højde       
        aL=P7_getLDims(args[i]); // Finder elements position og højde og bredde
        lh=aL[2]; // Elements højde
        lw=aL[3]; // Elements bredde
        tp=aL[1]; // Elements top-position
        lp=aL[0]; // Elements left-position
        if(mm==1){ // Hvis andet argument er 1. Sætter left-position til et fast tal
            lp=mr; // Sæt elements left-position til tredje argument (580)
        }
        if(mm==2){ // Hvis andet argument er 2.
            lp=parseInt((ww-lw-mr)/2); // Sæt venstre position til vinduets bredde minus elements bredde minus tredje argument delt med 2
            if(lp<0){lp=0;} // Hvis dette giver mindre end 0 så sæt left-position til 0
        }
        if(mm==3){ // Hvis andet argument er 3
            lp=ww-lw-mr; // Sæt left-position til vinduets bredde minus elements bredde minus tredje argument
            if(lp<ml){lp=ml;} // Hvis dette giver mindre end fjerde argument (her 0) så sæt den til det fjerde argument
        }
        if(mm==4){ // Hvis andet argument er 4
            tp=parseInt((wh-lh-mr)/2); // Sæt top-position til vinduets højde minus elements højde minus trejde argument delt med 2
            if(tp<0){tp=0;} // Hvis det giver mindre end 0 sæt top-position til 0
        }
        if(mm==5){ // Hvis andet argument er 5 - sætter elementet i midten af vinduet (+ tager højde fra margins)
            tp=parseInt((wh-lh)/2); // Sæt top-position til vinduets højde - elements højde delt med to
            lp=parseInt((ww-lw)/2); // Sæt left-position til vinduets bredde - elements bredde delt med to
            if((lp-mr)<=0){lp=mr;} // Hvis left-position minus tredje argument er <= 0 sæt left-p. til tredje arg.
            if((tp-ml)<=0){tp=ml;} // Hvis top-position minus fjerde arg. er <= 0 sæt top-p. til fjerde arg.
        }
        if(mm==6){ // Hvis andet arg. er 6
            tp=wh-lh-mr; // Sæt top-position til vinduets højde minus elements højde minus tredje argument
        }
        // Sætter elements top og left position plus enhed (pa)
        gg.top=tp+pa;
        gg.left=lp+pa;
        if(!document.p7alignRR){ // Hvis p7alignRR er falsk (eller ikke eksisterer)
            p7aRR=new Array();
            document.p7alignRR=true; // Sæt den til true
            document.p7RR=0;
            if(document.layers){ // Hvis browserern er netscape 4
                document.p7RRiw=innerWidth;
                document.p7RRih=innerHeight;
            }
            onresize=P7_alignRR; // Hvis vinduet bliver resizet kald P7_alignRR()
        }
        if(document.p7RR==0){ // Hvis p7RR er 0 (kan blive sat til 1 i P7_alignRR()
            // Laver et nyt punkt i arrayet hvor det man skrev i onmouseover bliver gemt (fx P7_alignWD2('profil',3,580,0);)
            p7aRR[p7aRR.length]="P7_alignWD2('"+args[i]+"',"+mm+","+mr+","+ml+")";
           
        }
    }
}
}


Helt præcist går de forskellige funktioner ud på følgende:
MM_findObj(id) - returnerer et object med en given id
P7_getWD("width"|"height") - returnerer enten vinduets højde eller bredde (afhængigt af argumentet)
P7_getLDims(id) - returnerer et element med en given id's position (left/top) og dimension (højde/bredde)
P7_alignWD2(id,positions_type,margin_højre,margin_venstre) - Det er denne som er egentlig vigtig. Den tager et element med en given id og placerer den på skærmen efter en ud af 6 forskellige typer. Man kan nu sætte en margen fra højre og venstre (det er lidt kryptisk om det virkelig er marginer, da de opfører sig lidt forskelligt fra type til type). Men grundlæggende handler det om at funktionen placerer den boks som bliver vist når man fører musen over billedet. Jeg har ikke helt kunne tydet de forskellige positions typer - i hvert fald ikke hvad de skal gøre godt for, da det altid afhænger af de tredje og fjerde argument.
P7_alignRR() - Gør grundlæggende det at den placerer elementerne på ny hvis vinduet bliver resizet.

Det skulle være det - ved godt det var lidt af en stor omgang, men nu håber jeg det er fyldesgørende nok. Mere kan jeg ikke få ud af de funktioer, men de er i grunden meget fikse at have - i hvert fald de tre første, som kan bruges til ret så meget. De to sidste funktioner er egentlig dem som gør noget rent praktisk, og er lavet sådan at man let kan bruge den på flere elementer og med flere forskellige positions-muligheder. Funktionerne er altså ikke bare til at kunne placere et enkelt object, men også at kunne bruges til alt muligt andet - om det er så relevant for denne side er så et spørgsmål ;-)
Avatar billede skovenborg Nybegynder
11. september 2004 - 04:23 #7
men når man virkelig tænker over det har du fuldstændig ret i at det virker som ren spild med alle de funktioner da de kun bliver brugt et sted og på én måde. Det virker jo åndsvagt at lave en kæmpemæssig advanceret funktion som kun bliver brugt til at placere ét element et helt bestemt sted... så skulle de i hvert fald have droppet dem på de andre sider...
Avatar billede baitianlong Nybegynder
11. september 2004 - 13:50 #8
Hvor er du smuk :) Thumbs up der !
Avatar billede skovenborg Nybegynder
11. september 2004 - 14:07 #9
det var så lidt - og tak for points :-)
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