16. maj 2010 - 01:28Der 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
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; } }
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; } }
Synes godt om
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
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.
- 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>
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.