10. juni 2004 - 12:34Der er
33 kommentarer og 1 løsning
mystisk fejl dekleration af varibel
Jeg har følgende kode: <script> var n=0; function rotate(linkid,strfilename) { var path='images/'; var arrlinks = strfilename.split(';'); var imgs = new Array(); var c=0;
for ( i=0; i<=arrlinks.length-1; i++) { imgs[c] = new Image();imgs[c++].src=path+arrlinks[i]; }
er noget vrøvl. Den måde at skrive en if-sætning på kan ikke stå alene, men bruges til at vælge mellem to værdier som skal sendes til en funktion eller tildeles en variabel.
du bruger var UDENFOR function-defifnitions-blokken, for at gøre n til en top-level variabel. Så kan du INDENI funktionen skrive n eller window.n, og så er det den samme n i hvert timeout. Hvis du bruger var INDE I funktionen, laver du en ny variabel for hvert interval, som altid er nul :^(
For at køre det har jeg: <img id='11' src='images/top13a.png' alt='' border='0'> <script>setInterval("rotate(11,'top13a.png;top13b.png;top13c.png');",500);</script>
Men setInterval() skal vel ind i funktionen på en måde?
næ, setInterval er en gentage-det-samme-i-en-uendelighed funktion. Du burde faktisk lave to funktioner, én til at lave en array af Image-objekter, og én til at styre rotationen. Image-objektet kan nemlig 'preloade' billedet, så browseren er klar til at skifte ud hurtigt. For at virke på den måde skal Image objekterne genereres når siden loades (fks i et script i head) og ikke, som i din funktion ovenfor, på det tidspunkt hvor billederne skal bruges.
nb: Hvis der er flere 'bannere' på samme side får du problemer med variabelnavne...
Du må finde en måde de forskellige variable kan blive holdt ude fra hinanden. Det nemmest er for hver banner at lave et objekt som indeholder en tæller og en array med billeder
<script type="text/javascript"> var n = new Array(); function rotate(linkid,strfilename){ if(!n[linkid])n[linkid] = 0; var path='images/'; var arrlinks = strfilename.split(';'); document.getElementById(linkid).src=path+arrlinks[n[linkid]]; n[linkid] = (++n[linkid])%arrlinks.length; } </script>
-- der indgår en preloader, som ikke giver nogen mening, når alle billeder loades hver gang, derfor har jeg udeladt den ...
-- men principielt er det det også bedre at bruge knudx' ide, som også preloader billederne, men han har heller ikke være opmærksom på den html-fejl, det er at bruge et id med et tal forrest eller den javascript-fejl, det tilsvarende vil være at bruge identifier, som starter med et tal. Desuden kan en lille forbedring laves:
<script type="text/javascript"> function fix_preload(strfilename){ var path='images/'; var arrlinks = strfilename.split(';'); var imgs = new Array(), c;
for ( i=0; i<arrlinks.length; i++) { c = new Image(); c.src = path+arrlinks[i]; imgs.push(c); } return imgs; }
Hmm jeg har lavet 3 bannere med henholdsvis et A,B,C på... de kommer ikke i rækkefølge... Hvad kan dette skyldes?
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.