Avatar billede wuppie Nybegynder
01. juni 2005 - 21:01 Der er 8 kommentarer og
1 løsning

Hjælp til billede skift!

Hey eksperter.
Jeg har en <select> boks som indholder nogle navne fx "It-nyt" og som så har en value="gfx/itnyt.gif". Jeg vil gerne have sådan at der er et billede under dropdown menuen som viser valuen af den valgte <option>
Håber i forstår mit spørgsmål :)

/Wuppie
Avatar billede skovenborg Nybegynder
01. juni 2005 - 21:07 #1
Du kan prøve:
<select onchange="if (this.selectedIndex > 0) {document.getElementById('billede').src = this.value;}">
<option value="">Vælg billede</option>
<option value="gfx/itnyt.gif">It-nyt</option>
<option value="gfx/nogetandet.gif">Noget andet</option>
</select>
<img src="" id="billede">

Det kan her være en god ide at preloade sine billeder først.
Avatar billede wuppie Nybegynder
01. juni 2005 - 21:08 #2
Hvordan gøres det :D?
Avatar billede skovenborg Nybegynder
01. juni 2005 - 21:27 #3
Det er der flere måder at gøre på, men jeg plejer at bruge denne metode:
// Array med billed-urls
  var billeder = ["billed1.png","billed2.png","billed3.png"];
  var preloadArr = new Array();
  // Preloader
  for (var i=0;i<billeder.length;i++) {
      preloadArr[i] = new Image();
      preloadArr[i].src = billeder.src;
  }

Du har altså et array med en masse url's til billeder og så kører for-løkken dem igennem. Når du laver en Image-objekt og tildeler den den rette url (src) så bliver billedet loadet ind i hukommelsen.

Jeg har dog tit spekuleret på om hvorvidt det er nødvendigt, at lave et nyt Image-objekt for hvert billede eller om man bare kunne skrive:
var billeder = ["billed1.png","billed2.png","billed3.png"];
  var preloadImg;
  // Preloader
  for (var i=0;i<billeder.length;i++) {
      preloadImg = new Image();
      preloadImg.src = billeder.src;
  }

Men det kommer nok også an på hvordan browseren behandler javascript, hukommelsen, cachen og den slags. Jeg vil i hvert fald nok tro du bliver nødt til at bruge den øverste metode - der er jo heller ikke den store forskel.
Avatar billede roenving Novice
03. juni 2005 - 02:14 #4
Hrm, Ulrik, du har da vist lavet en lille bommer her ...

  for (var i=0;i<billeder.length;i++) {
      preloadArr[i] = new Image();
      preloadArr[i].src = billeder[i];
  }
Avatar billede roenving Novice
03. juni 2005 - 02:17 #5
-- og et gæt på et svar til din forundring kunne være, at hvis ikke du laver et selvstændigt Image-objekt, vil browseren slette den tidligere instans og fjerne alle funkrtioner tilknyttet det, før det er færdigt med at loade ...

-- men med de mest forekommende billeder (menu-tekster, små logoer m.m. !-) betyder det jo alligevel ikke noget, da IE jo alligevel kigger efter på serveren, om der skulle være kommet en ny udgave hver gang, det skal vises !o]
Avatar billede skovenborg Nybegynder
03. juni 2005 - 16:55 #6
hovsa :-S

Ellers lyder din forklaring på hvorfor man skal lave et selvstændigt Image-objekt meget logisk. Var nok også mest en lille flyvsk tanke, at browseren beholdt billedet i hukommelsen, også selvom man ændrer på Image-objektets src.
Avatar billede roenving Novice
04. juni 2005 - 12:47 #7
-- og jeg tror faktisk billedet bliver i hukommelsen, selvom man sletter Image-objektet, men det nytter ikke meget, hvis objektet fjernes før billedet fysisk er kommet ind !-)
Avatar billede wuppie Nybegynder
08. juni 2005 - 20:38 #8
Okay tak til jer alle sammen :)
Avatar billede roenving Novice
09. juni 2005 - 02:46 #9
Kunne du da ikke bruge Ulriks script og forklaringer ?-(
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