26. september 2001 - 10:22Der er
19 kommentarer og 1 løsning
Preload af Gif, endnu engang.
Hej, jeg ved dette spørgsmål er blevet stillet cirka 1500 gange, men jeg kan bare ikke få det til at virke. Jeg har en menu på min side: http://nirlev.homepage.dk/head.htm hvor jeg har nogle mouseover effekter, som skal preloades, men det bliver de bare ikke. Billdere fylder ret meget, men det skulle jo nok kunne lade sig gøre.
<ole> De preloader også fint hos mig, men det er også i en IE under Windows. Prøver man til gengæld i en begavet browser, der kan læse JavaScript korrekt, vil \'ONLOAD\' dog sikkert give problemer. Det skal staves med småt: \'onload\' - eller evt.: \'onLoad\'. /mvh </bole>
Det virker nogenlunde nu, men jeg synes bare stadig den er lidt langsom: http://nirlev.homepage.dk/head.htm kan den ikke gøres mere effektivt / hurtigere??
Så er din maskine langsom - eller din forbindelse.
nute >> Næhhhh....den preload-funktion er helt korrekt. Se engang på mine kommentarer:
function preload() { if (document.images) { // \'imgFiles\' sættes til argumenter i kaldet var imgFiles = preload.arguments; // Hvis \'preloadArray\' ikkeksisterer, opretter vi det if (document.preloadArray==null) document.preloadArray = new Array(); var i = document.preloadArray.length; // Hvis ikke det aktuelle argument starter med \'#\', preloades billedet with (document) for (var j=0; j<imgFiles.length; j++) if (imgFiles[j].charAt(0)!=\"#\"){ preloadArray[i] = new Image; preloadArray[i++].src = imgFiles[j]; } } }
ole >> jeg sa ikke at den var *gal* (les: ikke korrekt)...jeg skrev at den så relativt meerkelig ut. Ting som er korrekste kan stadigvekk se merkelig ut. Fx...hvis man ikke kan lese gresk, så ser skriften merkelig ut, men det er fullstendig korrekt (for dem som kan lese det) ;)
acidburn >> det fungerer fint hos meg...men du *kan* prøve å skrive dette:
Den minder ualmindelig meget om DreamWeavers måde at gøre det på....det er faktisk en meget almindelig preload\'er. Jeg ville nu foretrække den skrevet lidt om:
var preloadArray = new Array(); function preload() { if (document.images) { // \'imgFiles\' sættes til argumenter i kaldet var imgFiles = preload.arguments; // Hvis ikke det aktuelle argument starter med \'#\' preloades billedet for (var j=0; j<imgFiles.length; j++) if (imgFiles[j].charAt(0)!=\"#\"){ i = preloadArray.length; preloadArray[i] = new Image(); preloadArray[i].src = imgFiles[j]; } } }
Det hedder \'new Image()\'. Husk parentesen :) /mvh
var preloadArray = new Array(); function preload() { if (document.images) { // \'imgFiles\' sættes til argumenter i kaldet var imgFiles = preload.arguments; // Hvis ikke det aktuelle argument starter med \'#\' preloades billedet for (var j=0; j<imgFiles.length; j++) if (imgFiles[j].charAt(0)!=\"#\"){ i = preloadArray.length; preloadArray[i] = new Image(); preloadArray[i].src = imgFiles[j]; } }
olebole >> jammen *det* skal du få lov å brokke deg over :-) jeg har da lært noe idag:
preload.arguments
den kjente jeg overhodet ikke til. Jeg kan ikke si jeg liker å se at det er mulig, men det er da heller ikke meg som utvikler språket. Jeg er mer til eksplisitt programmering :-)
\'Function.arguments\' er core JavaScript 1.0 og ECMA-262 =)
Den er dog deprecated til fordel for Arguments objektet (core JavaScript 1.1 og ECMA-262). Her refererer \'arguments\' inde i en funktion til funktionens Arguments objekt. Objektet er et array \'arguments[]\', som indeholder de argumenter, der blev sendt til funktionen. \'arguments\' bliver automatisk oprettet som en lokal variabel i enhver funktion. /mvh
acidburn >> preload er ikke en mirakelkur der får et 150K billede til bare at være loadet. Med preload kan du påbegunde hentningen lidt tidligere, men det tager den sedvanlige tid at hente billedet. Så hvis det er vigtigt at billederne er klar såsnart \'ikke-mouseover\' versionen af siden bliver vist er det nok bedst at preloade billederne på siden før den side de skal bruges på, og så lave et eller andet godt indhold på den side der holder brugeren fanget imens billederne snøvler sig på plads.
min favorit til en standard preloader er:
<script>
var preImgs = new Array( \'billed1.jpg\', \'billed2.jpg\', \'images/billed2.gif\', \'billed4.jpg\' ); //liste af urler
function doPreload() { if (document.images) for (var i=0; preImgs.length>i; i++ ) { temp = preImgs[i]; preImgs[i] = new Image(); preImgs[i].src = temp; } }; //end doPreload()
</script>
husk også på at de billeder du preloader på den måde fulder i computerens RAM lager, og de fylder MEGET (lidt mere end billedet konverteret til .bmp på disk). Så hvis der er mange store billeder kan du nemt på problemer med plads i ram, selv på en 256Meg ram maskine. Så skal der laves en lidt smarter preload der frigiver den plads de der \'new Image()\'s optager efterhånden som billederne bliver preloadet.
her er en lidt mere avanceret preloader der frigiver den forbrugte ram efterhånden som billederne bliver prelodet:
<script>
var preImgs = new Array( \'billed1.jpg\', \'billed2.jpg\', \'images/billed2.gif\', \'billed4.jpg\' ); //liste af urler var loadMax = 5; // der må kun være 5 billeder der har preload igang samtidig var loadingCnt = 0; // hvor mange billeder er igang med at loade var loadIndex = 0; // nummer på næste billede der skal preloades.
function doPreload() { if (document.images) { for ( var i=0; preImgs.length>i; i++ ) { if ( preImgs[i] && preImgs[i].completed ) { preImgs[i] = null; // frigiv pladsen i Ram loadingCnt--; } } for ( ; loadMax>loadingCnt && preImgs.length>loadIndex; loadingCnt++ ) { temp = preImgs[loadIndex]; preImgs[loadIndex] = new Image(); preImgs[loadIndex++].src = temp; } if ( loadingCnt>0 || preImgs.length>loadIndex ) setTimeout( \"doPreload()\", 100 ); } }; //end doPreload()
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.