Avatar billede ronja7 Nybegynder
11. august 2003 - 10:19 Der er 22 kommentarer og
1 løsning

Optimere ændring af billeder

Jeg har en liste af brugere, som man skal kunne se en status og tendens for på 10 forskellige målepunkter - een af gangen. Jeg har lavet to clear.gif for hver bruger, og disse ændres så efter hvilket målepunkt jeg vælger i en dropdown. Det virker, men er flere sekunder om at ændre de ca. 500 små billeder.

for (i=0; i<brugerArray.length; i++)
{               
    document.all['pil-' + brugerArray[i]].src = 'img/arrow_green_up.gif'
    document.all['indeks-' + brugerArray[i]].src = 'img/Status_green.gif'
}

Det er denne løkke der er enormt sløv..

Nogle forslag?
Avatar billede mm12010 Nybegynder
11. august 2003 - 10:27 #1
http://www.phoenixv.dk/arkiv.html

Billeder >> Avanceret preloader
Avatar billede ronja7 Nybegynder
11. august 2003 - 10:37 #3
Man kunne godt tro at det var loadingen af billederne der var flaskehalsen, men applikationen kører på et intranet, som er meget hurtigt. Det drejer sig om i alt fire forskellige filer, som går igen mange gange. De er ret små, så båndbredden burde ikke være et problem.

Efter valg i selectboksen, står Exploreren i nogle sekunder stille, og arbejder. Selvom den lyder smart den preloader, tror jeg ikke det løser mit problem.
Avatar billede mm12010 Nybegynder
11. august 2003 - 10:48 #4
kan ikke lige sætte en finger på noget der, men du kan prøve at ændre det:

for (i=0; i<brugerArray.length; i++){
    if(document.images){             
        document.images['pil-' + brugerArray[i]].src = 'img/arrow_green_up.gif'
        document.images['indeks-' + brugerArray[i]].src = 'img/Status_green.gif'
        }
    }
Avatar billede ronja7 Nybegynder
11. august 2003 - 10:59 #5
Ingen forskel. Stadig samme svartid på adskillige sekunder.
Avatar billede mm12010 Nybegynder
11. august 2003 - 11:04 #6
hmm...

må jeg se resten af din kode?
Avatar billede ronja7 Nybegynder
11. august 2003 - 11:20 #7
Fire snipper:
-----------------------------
<select name='produkt' class='RButton' size='1' onchange=java script:change_images();>
<option value='0' selected>Vælg produktgruppe...</option>
<option value='1' osv.....
-----------------------------
function change_images(){
    var selecta = document.forms[0].elements['produkt'].value;
    var i;               
    for (i=0; i<brugerArray.length; i++)
    {               
    document.all['pil-' + brugerArray[i]].src = 'img/arrow_green_up.gif'
    document.all['indeks-' + brugerArray[i]].src = 'img/Status_green.gif'
    }               
    }
------------------------------
response.write "brugerArray.length =" & antal & ";"
------------------------------
<SCRIPT language="JavaScript">
    brugerArray[<%=brugerCount%>] = '<%=bruger%>';   
</SCRIPT>
, hvor brugerCount er min RecordSet-counter, og bruger er et brugernummer.
Avatar billede ronja7 Nybegynder
11. august 2003 - 11:22 #8
brugerArray.length er ca. 250 i de fleste tilfælde.
Avatar billede mm12010 Nybegynder
11. august 2003 - 11:23 #9
<select name='produkt' class='RButton' size='1' onchange='change_images();'>
Avatar billede ronja7 Nybegynder
11. august 2003 - 11:46 #10
nej desværre, heller ikke..
Avatar billede roenving Novice
11. august 2003 - 13:11 #11
Jamen tester du på alle brugere hver gang een ændrer sig ?-)
Avatar billede ronja7 Nybegynder
11. august 2003 - 13:34 #12
Det er ikke en funktion på hver bruger. Det er en liste af brugere, hvor begge gif'er skal ændre sig for _alle_ brugere, ved skift i selectboksen. Så ja..
Avatar billede roenving Novice
11. august 2003 - 14:18 #13
Sidder og tænker på en lidt fræk tilgang ...

Normalt ville jeg banne den, da den i princippet er langsom, men hvad med at have de status-billeder som baggrunde i nogle div's og så ændre css-rule'ns property:

<div class="statusArrow"></div>
<div class="status"></div>

<style type="text/css">
.statusArrow{
background:"url('img/arrow_green_left.gif') no-repeat top left";
}
.status{
background:"url('img/status_green.gif') no-repeat top left";
}
</style>

function changeBackgroundImages(){
cssrules = document.styleSheets[0].rules;
for(i=0;cssrules.length>i;i++){
  if(cssrules[i].selectorText=='statusArrow')
    cssrules.style.background="url('img/arrow_green_up.gif') no-repeat top left"
  if(cssrules[i].selectorText=='status')
    cssrules.style.background="url('img/status_green.gif') no-repeat top left";
}
}
Avatar billede ronja7 Nybegynder
11. august 2003 - 15:35 #14
Det er muligt det er et dumt spørgsmål: Er background en valid property på et div-tag?

Hvis jeg bruger dine klasser som angivet, viser der sig intet, men hvis jeg benytter dem på f.eks. en <td> virker den godt.. Men der sker ikke noget ved kørsel af js-functionen. Men det ser spændende ud!
Avatar billede roenving Novice
11. august 2003 - 15:41 #15
Ja, background er valid på (så vidt jeg ved !-) _alle_ tags ...

Selv radio-buttons kan man lægge et billede ind bag ved -- det giver dog en sjov effekt ...

-- nå jeg må vist også selv teste den -- umiddelbart var den ment som inspiration, og derfor skrevet ind direkte her -- prøver lige !-)
Avatar billede roenving Novice
11. august 2003 - 15:50 #16
Ja, der var jo lige et par klumper ...

<html>
<head>
<style type="text/css">
.statusArrow{
background:#0f0 url('img/arrow_green_left.gif') no-repeat top left;
width:200px;
height:50px;
}
.status{
background:#ff0000 url('img/status_green.gif') no-repeat top left;
width:200px;
height:50px;
}
</style>

<script type="text/javascript">
function changeBackgroundImages(){
cssrules = document.styleSheets[0].rules;
alert(cssrules.length);
for(i=0;cssrules.length>i;i++){
alert(cssrules[i].style.background+"\n"+cssrules[i].selectorText);
  if(cssrules[i].selectorText=='.statusArrow')
    cssrules[i].style.background="#0ff url('img/arrow_green_up.gif') no-repeat top left";
  if(cssrules[i].selectorText=='.status')
    cssrules[i].style.background="#fff url('img/status_green.gif') no-repeat top left";
alert(cssrules[i].style.background);
}
}
</script>
<body>
<button onclick="changeBackgroundImages()">Tryk her</button><br><br>
<div id="arrow1" class="statusArrow"></div>
<div id="status1" class="status"></div>
<div id="arrow2" class="statusArrow"></div>
<div id="status2" class="status"></div>
<div id="arrow3" class="statusArrow"></div>
<div id="status3" class="status"></div>
<div id="arrow4" class="statusArrow"></div>
<div id="status4" class="status"></div>
<div id="arrow5" class="statusArrow"></div>
<div id="status5" class="status"></div>

</body>
</html>

-- så kan den ses ...
Avatar billede roenving Novice
11. august 2003 - 15:51 #17
-- og de tre alert's skal selvfølgelig fjernes ligesom oplysningerne om farver ...
Avatar billede ronja7 Nybegynder
11. august 2003 - 16:18 #18
Nu tror jeg at jeg fik det til at funge nogenlunde. Det er stadig tungt, men absolut hurtigere end før. Flot!

Nu er mit eneste lille enestående at <div> laver et <p> implicit, og gif'erne skulle gerne stå på linie. :-)

Kan man definere to filer som background, eller skal jeg finde en anden workaround?

Smider du et svar?
Avatar billede roenving Novice
11. august 2003 - 16:23 #19
Du kan gøre en af to-tre ting:

-- Sætte display:inline; på dine div-styles ...
-- sætte float:left; på dem som kommer før noget andet i en række ...
-- eller bruge <span>s i stedet ...

Der kan kun være een fil som baggrund ad gangen, men man må godt have en baggrundsfarve, som jeg også viste ...

Velbekomme '-)
Avatar billede roenving Novice
11. august 2003 - 16:25 #20
-- og forøvrigt har jeg brugt background-samle-property'en, du kan nøjes med at ændre image-property'en:

    cssrules[i].style.backgroundImage="url('img/status_green.gif')";

På den måde skal du ikke vedligeholde så meget !-)
Avatar billede roenving Novice
11. august 2003 - 16:28 #21
Der er forøvrigt en alvorlig mangel ved denne metode, men den regner jeg ikke med at du støder ind i, når du kører på intranet og iøvrigt havde brugt document.all ...

I ie hedder det rules, i NS/Mozilla hedder det cssrules, så hvis du en dag skal bruge det på internet skal der codebranches ...
Avatar billede ronja7 Nybegynder
11. august 2003 - 18:36 #22
Super cool.. Jeg har heldigvis ikke de problemer på dette intranet. Der må jeg sovse ligeså meget jeg vil, lige indtil de skifter til en anden browser :-)
Avatar billede roenving Novice
11. august 2003 - 18:42 #23
-- og tak for points ;~}
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