Avatar billede chriz7913 Nybegynder
16. maj 2010 - 01:28 Der er 5 kommentarer og
1 løsning

Vente på at javascript har fundet størrelsen af billedet.

Hej alle eksperter :)
Jeg har været igang med at programmere mit eget galleri i javascript, hvor jeg har et array med billeder og når man så går til et billede, finder den adressen på det i array'et og der bruger jeg så denne funktion til at finde størrelsen på billedet, så jeg kan resize rammens størrelse:
[code]
function getImgSize(imgSrc)
{
var newImg = new Image();
newImg.src = imgSrc;
var height = newImg.height;
var width = newImg.width;
return width+height;
}
[/code]
Mit problem er så at det nogle gange tager det et par millisekunder at finde størrelsen, og det er javascript ligeglad med, så den fuldfører bare resten af scriptet, resulteret i at rammen ender med en størrelse på 0x0.
Findes der en funktion der kan få javascript til at vente med at gå videre med scriptet indtil fx størrelsen ikke er lig 0. Og hvis der så er gået mere end x antal sekunder hvor den har prøvet at få fat i størrelsen uden held, kommer der en alert og størrelsen bliver sat til fx 500.
På forhånd tak for hjælpen
Avatar billede janmanden Nybegynder
16. maj 2010 - 02:37 #1
Du kunne jo bruge setTimeout, som venter med at udføre en funktion indtil et vist antal millisekunder er gået.

Herunder vil der så ske det, at hvis højde eller bredde er lig med 0 så venter den 100 (+100 millisekunder for hver gang den kaldes) millisekunder før den kalder sig selv igen og bliver ved med det intil ingen af dem længere er nul, men det er måske ikke så optimalt, da funktionen vel egentlig evaluerer udtrykket fra ny hver gang.

function getImgSize(imgSrc, starttime) {
    if (arguments.length==1)
        starttime = 100;
    var newImg = new Image();
    newImg.src = imgSrc;
    var height = newImg.height;
    var width = newImg.width;
    if (width == 0 || height == 0) {
        setTimeout("getImgSize('" + imgSrc + "',' + (starttime + 100) + ')";
    } else {
        return width+height;
    }
}
Avatar billede janmanden Nybegynder
16. maj 2010 - 02:40 #2
Der var lige to citationstegn for lidt i det andet parameter i setTimeout.

function getImgSize(imgSrc, starttime) {
    if (arguments.length==1)
        starttime = 100;
    var newImg = new Image();
    newImg.src = imgSrc;
    var height = newImg.height;
    var width = newImg.width;
    if (width == 0 || height == 0) {
        setTimeout("getImgSize('" + imgSrc + "','" + (starttime + 100) + "')";
    } else {
        return width+height;
    }
}
Avatar billede Slettet bruger
16. maj 2010 - 05:06 #3
Du kunne være smart og gemme billedernes dimensioner i deres filnavne, de sidste 2x3 tegn i en "bred integer" = bredde x højde, du har adgang til værdierne ved upload - på det tidspunkt hvor du alligevel skal sørge for at de får et nyt og unikt navn, på disk OG i databasen:(TiD)XxxYyy.jpg
Avatar billede j4k0b Nybegynder
16. maj 2010 - 08:19 #4
function resizeFrame(width, height) {
    ...
}

function getImgSize(imgSrc) {
    var newImg = new Image();
    newImg.src = imgSrc;
    newImg.onload = function() {
        resizeFrame(this.width, this.height);
    }
}
Avatar billede chriz7913 Nybegynder
16. maj 2010 - 11:19 #5
Tak for svarene alle sammen. Jeg har besluttet at det er T4NK3R der får point, da jeg fik idéen ved at læse hans svar; jeg kunne jo bare gemme størrelserne når jeg uploadede filerne i databasen, og så få dem med i arrayet når siden bliver loadet. Dette er i sidste ende også den hurtigste løsning.
Avatar billede olebole Juniormester
17. maj 2010 - 12:39 #6
<ole>

- og ellers er j4k0b's forslag en meget udbredt og god løsning. At forsøge at time sig ud af problemerne, skaber dog kun nye problemer

/mvh
</bole>
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