Avatar billede acidburn Nybegynder
26. september 2001 - 10:22 Der 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.
Avatar billede Slettet bruger
26. september 2001 - 10:24 #1
For at preloade et billede:

<script>
image1 = new Image();
image1.src = \"dit-billede.gif\"

image2 = new Image();
image2.src = \"dit-andet-billede.gif\"
</script>

O.S.V.
Avatar billede nute Nybegynder
26. september 2001 - 10:27 #2
hmmm....det ser ut til å fungere for meg...
Avatar billede nute Nybegynder
26. september 2001 - 10:28 #3
phoenixv >> man kan saktens preloade bilder inn i en array...
Avatar billede olebole Juniormester
26. september 2001 - 10:34 #4
<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>
Avatar billede nute Nybegynder
26. september 2001 - 10:35 #5
meeeen....

acidburn >> du skriver

ONLOAD=\"preload(\'images/newmenu/forside2.gif\');preload(\'images/newmenu/info2.gif\'); ...

men din preloadfunksjon skal ikke ha noen parameter:

function preload() {

Det kan du ikke gjøre.

En annen ting er jo din preload funksjon....den ser relativt merkelig ut. Ta en titt på denne artikkel. Den forklarer deg hvordan du skal gjøre

http://www.builder.dk/artikler/article.asp?AID=40

/nute
Avatar billede acidburn Nybegynder
26. september 2001 - 10:45 #6
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??
Avatar billede olebole Juniormester
26. september 2001 - 10:49 #7
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];
        }
      }
}

/mvh
Avatar billede nute Nybegynder
26. september 2001 - 10:54 #8
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:

img = new Image;

function changeImg(imgName, target) {
  img.src = imgName;
  document[target].src = img.src;
}

om til kun:

function changeImg(imgName, target) {
  document[target].src = imgName;
}

/nute
Avatar billede olebole Juniormester
26. september 2001 - 11:09 #9
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
Avatar billede olebole Juniormester
26. september 2001 - 11:10 #10
Hov......en \'tuborg\' for meget:

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];
      }
}
Avatar billede olebole Juniormester
26. september 2001 - 11:19 #11
...og nute >> Du skrev:

\"men din preloadfunksjon skal ikke ha noen parameter:

function preload() {

Det kan du ikke gjøre.\"

...det var nok mest det, jeg \'brokkede\' mig over. Det er nemlig ikke rigtigt  :)
/mvh
Avatar billede nute Nybegynder
26. september 2001 - 11:22 #12
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 :-)

/nute
Avatar billede olebole Juniormester
26. september 2001 - 11:35 #13
\'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
Avatar billede nute Nybegynder
26. september 2001 - 11:42 #14
takker for info :-)

/nute
Avatar billede olebole Juniormester
26. september 2001 - 11:43 #15
...anytime  :)
PS: Det er nu heller ikke mig, der udvikler sproget. Nogle gange er jeg endda blevet beskyldt for at afvikle det!  *LooL*
Avatar billede nute Nybegynder
26. september 2001 - 11:48 #16
:-D

jeg synes du gjør en god jobb med å *videreføre* det...avvikling beror på andres ignoranse...det de ikke forstår, vil de heller ikke være bekjent med

;-)
Avatar billede jakoba Nybegynder
26. september 2001 - 12:11 #17
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.

mvh JakobA
Avatar billede roenving Novice
26. september 2001 - 12:29 #18
Endelig kom JakobA forbi, så han kunne angive den nemmest overskuelige måde -- angiv en liste med billed-Urler og load fra den !·]
Avatar billede jakoba Nybegynder
26. september 2001 - 12:31 #19
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()

</script>

mvh JakobA
Avatar billede random Nybegynder
28. januar 2009 - 15:10 #20
Hvor skal doPreload() sættes ind?
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