Vi skal nå lage et javascript med to funksjoner. En funksjon som skal hete "vis_skjul" tar seg av
vising og skjuling av menyene, og funksjonen "bytt_knapp" bytter om på bildene som representerer knappen.
Javascriptet skal stå øverst i html-dokumentet, innenfor head-taggen.
<html>
<head>
<script language="JavaScript">
</script>
</head>
...
</html>
Funksjonen "vis_skjul" tar ett argument. Argumentet sier hvilken av menyene vi skal utføre endringer på.
Hvis menyen er skjult skal den vises, og hvis den er synlig skal den skjules. For å finne ut om menyen er skjult eller
ikke, kan vi spørre tabellradens style.display-egenskap.
function vis_skjul(valg) {
if(document.all["under_" + valg].style.display == "none")
{
// den er skjult, og skal vises
}
else
{
// den er synlig og skal skjules
}
}
document.all er en referanse til alle objekter i html-dokumentet som har navnet som skrives
inni klammeparentesen. Inni klammen har jeg skrevet "under_" + valg. Hvis vi sender med "diverse"
som argument når vi kaller på funksjonen (i del 3) vil javascriptet ha en referanse
til alle objekter som heter "under_diverse", som er tabellraden som inneholder alle linkene. Dette ble definert i del 1.
Hvis objektet's style.display-egenskap har verdien "none" betyr det at den ikke vises;
-det som vises er ingenting.
Nå gjenstår bare koden som foretar selve visingen og skjulingen av objektene. Vi ønsker å skjule den tabellraden som
kun er en blå linje i tillegg til tabellraden med linkene. For å skjule setter vi style.display = "none", og for å
vise setter vi style.display = '', som egentlig er null. Vi må også
skifte bildet som representerer knappen. Den skal vise pil opp når menyen vises, og pil ned når menyen er skjult.
function vis_skjul(valg) {
if(document.all["under_" + valg].style.display == "none")
{
document.all["velger_" + valg].src = opp_on.src
document.all["under_" + valg].style.display = ''
document.all["skille_" + valg].style.display = ''
}
else
{
document.all["velger_" + valg].src = ned_on.src
document.all["under_" + valg].style.display = "none"
document.all["skille_" + valg].style.display = "none"
}
}
Vi må også ha en funksjon som bytter bildene som representerer knappen. Dette fordi knappen skal endre farge når man
peker på en av menyene. Dette gjør at knappen blir lettere å oppdage for brukere som ikke vet hvordan menyen er oppbygd
og hvordan den virker.
function bytt_knapp(valg, on_off)
{
}
Argumentet valg angir hvilken meny's knapp som skal forandres. Det andre argumentet angir om knappen skal være opplyst
eller ikke.
Vi definerer at "on" i det andre argumentet skal bety at knappen skal være opplyst, og at "off"
skal bety at den er i normal tilstand. Vi lager så en if-setning som skjekker dette.
function bytt_knapp(valg, on_off) {
if(on_off == "on")
{
}
else if(on_off == "off")
{
}
}
Vi må nå finne ut om bildet vi skal forandre er en opp-pil eller om det er en ned-pil. Vi lager derfor if-setninger
for dette også.
function bytt_knapp(valg, on_off) {
if(on_off == "on")
{
if(document.all["velger_" + valg].src == ned.src)
// knappen er en belyst ned-pil
else if(document.all["velger_" + valg].src == opp.src)
// knappen er en belyst opp-pil
}
else if(on_off == "off")
{
if(document.all["velger_" + valg].src == ned_on.src)
// knappen er en ned-pil med normal tilstand
else if(document.all["velger_" + valg].src == opp_on.src)
// knappen er en opp-pil med normal tilstand
}
}
Som vi husker fra del 1 fikk knappen navnet "velger_diverse". Ved å sette "diverse" som første argument
når vi kaller denne metoden er det knappen i diverse-menyen vi gjør endringer på.
Hvis knappen for øyeblikket er en ned-pil, skal den forandres til en ned-pil med en annen farge/tilstand og vice versa.
Vi skriver koden som forandrer bildet.
function bytt_knapp(valg, on_off) {
if(on_off == "on")
{
if(document.all["velger_" + valg].src == ned.src)
document.all["velger_" + valg].src = ned_on.src
else if(document.all["velger_" + valg].src == opp.src)
document.all["velger_" + valg].src = opp_on.src
}
else if(on_off == "off")
{
if(document.all["velger_" + valg].src == ned_on.src)
document.all["velger_" + valg].src = ned.src
else if(document.all["velger_" + valg].src == opp_on.src)
document.all["velger_" + valg].src = opp.src
}
}
Det kan se ut som denne funksjonen virker akkurat like bra selv om vi hadde kuttet ut det andre argumentet og de ytterste if-setningene.
Men man ville da kunne oppleve at knappen hadde "kommet ut av rytme" av og til. Den ville da slått seg på når man ikke peket på menyen o.s.v.
Det eneste vi mangler nå er en funksjon som skal kalles når sida først vises. Denne funksjonen skal laste ned de
nødvendige bildene og lagre dem i variablene som vi har brukt ovenfor. Ved å ha bildene lastet ned på forhånd kan
de vises straks vi har behov for dem. Uten denne funksjonen ville skiftingen av bildene hengt lenge etter, fordi man
måtte ventet på at de skulle lastes ned hver gang.
function oppstart() {
opp = new Image()
opp_on = new Image()
ned = new Image()
ned_on = new Image()
opp.src = "opp.gif"
opp_on.src = "opp_on.gif"
ned.src = "ned.gif"
ned_on.src = "ned_on.gif"
}
De fire første setningene lager nye image-objekter som vi kan lagre bildene i. De fire siste setningene laster ned bildene
og lagrer dem i variablene. Dette virker dessverre bare på den nyeste versjonen av Internet Explorer. Men man må uansett ta
denne funksjonen med, siden vi refererer til disse variablene ellers i scriptet.
->del 3
|