Avatar billede laksen Nybegynder
14. september 2005 - 11:47 Der er 6 kommentarer og
1 løsning

Optimering af slideshow - skal loades hurtigere

Hej eksperter

Jeg har modificeret nedenstående script, som jeg har hentet gratis fra www.peters1.dk.

Det fungerer på den måde, at der på min side kan hentes flere forskellige serier af billeder, der så kan åbnes i et slideshow.

Lige nu afvikles slideshowet helt perfekt. Det eneste problem er, at hvis en serie af billeder er meget stor, tager det relativt lang tid at hente slideshowet. Se mit eks. nedenfor, hvor jeg har smidt 50 forskellige billeder ind i array'et, der indeholder billede-filerne.

<script language="javascript" type="text/javascript">

////////////////////////////////////////////////////////////////
// Javascript made by Rasmus Petersen - http://www.peters1.dk //
////////////////////////////////////////////////////////////////

var SLIDE_billede = new Array("","001.JPG","002.JPG","003.JPG","004.JPG","005.JPG","006.JPG","007.JPG","008.JPG","009.JPG","010.JPG","011.JPG","012.JPG","013.JPG","014.JPG","015.JPG","016.JPG","017.JPG","018.JPG","019.JPG","020.JPG","021.JPG","022.JPG","023.JPG","024.JPG","025.JPG","026.JPG","027.JPG","028.JPG","029.JPG","030.JPG","031.JPG","032.JPG","033.JPG","034.JPG","035.JPG","036.JPG","037.JPG","038.JPG","039.JPG","040.JPG","041.JPG","042.JPG","043.JPG","044.JPG","045.JPG","046.JPG","047.JPG","048.JPG","049.JPG","050.JPG");
var SLIDE_text = new Array("","001","002","003","004","005","006","007","008","009","010","011","012","013","014","015","016","017","018","019","020","021","022","023","024","025","026","027","028","029","030","031","032","033","034","035","036","037","038","039","040","041","042","043","044","045","046","047","048","049","050");

var SLIDE_load = new Array();
var SLIDE_status = 'SLIDE_pause';
var SLIDE_timeout;
var SLIDE_aktuel = 1;
var SLIDE_speed = 3000;
var SLIDE_fade = 2;

for (i = 1; i <= SLIDE_text.length-1; i++)
{
  SLIDE_load[i] = new Image();
  SLIDE_load[i].src = SLIDE_billede[i];
}
var SLIDE_antal = SLIDE_billede.length-1;

function SLIDE_start()
{
  document.getElementById('SLIDE_pause').disabled = true;
  document.images.SLIDE_billedeBox.src = SLIDE_load[SLIDE_aktuel].src;
  document.getElementById("SLIDE_textBox").innerHTML= SLIDE_text[SLIDE_aktuel];
}

function SLIDE_play()
{
  document.getElementById('SLIDE_play').style.display='none';
  document.getElementById('SLIDE_play_disabled').style.display='';
  document.getElementById('SLIDE_pause').style.display='';
  document.getElementById('SLIDE_pause_disabled').style.display='none';
  SLIDE_aktuel++;
  SLIDE_slide();
  SLIDE_status = 'SLIDE_play';
  SLIDE_timeout = setTimeout("SLIDE_play()",SLIDE_speed);
}

function SLIDE_pause()
{
  clearTimeout(SLIDE_timeout);
  SLIDE_status = 'SLIDE_pause';
  document.getElementById('SLIDE_play').style.display='';
  document.getElementById('SLIDE_play_disabled').style.display='none';
  document.getElementById('SLIDE_pause').style.display='none';
  document.getElementById('SLIDE_pause_disabled').style.display='';
}

function SLIDE_tilbage()
{
  clearTimeout(SLIDE_timeout);
  SLIDE_aktuel--;
  SLIDE_slide();
  if (SLIDE_status != 'SLIDE_pause') SLIDE_timeout = setTimeout("SLIDE_play()",SLIDE_speed);
}

function SLIDE_fem_tilbage()
{
  clearTimeout(SLIDE_timeout);
  SLIDE_aktuel--;
  SLIDE_aktuel--;
  SLIDE_aktuel--;
  SLIDE_aktuel--;
  SLIDE_aktuel--;
  SLIDE_slide();
  if (SLIDE_status != 'SLIDE_pause') SLIDE_timeout = setTimeout("SLIDE_play()",SLIDE_speed);
}

function SLIDE_frem()
{
  clearTimeout(SLIDE_timeout);
  SLIDE_aktuel++;
  SLIDE_slide()
  if (SLIDE_status != 'SLIDE_pause') SLIDE_timeout = setTimeout("SLIDE_play()",SLIDE_speed);
}

function SLIDE_fem_frem()
{
  clearTimeout(SLIDE_timeout);
  SLIDE_aktuel++;
  SLIDE_aktuel++;
  SLIDE_aktuel++;
  SLIDE_aktuel++;
  SLIDE_aktuel++;
  SLIDE_slide()
  if (SLIDE_status != 'SLIDE_pause') SLIDE_timeout = setTimeout("SLIDE_play()",SLIDE_speed);
}

function SLIDE_slide()
{
  if (SLIDE_status != 'SLIDE_pause')
  {
  // et eller andet
  }
  if (SLIDE_aktuel > (SLIDE_antal)) SLIDE_aktuel=1;
  if (SLIDE_aktuel < 1) SLIDE_aktuel = SLIDE_antal;
  if (document.all)
  {
    document.images.SLIDE_billedeBox.style.filter="blendTrans(duration=2)";
    document.images.SLIDE_billedeBox.style.filter="blendTrans(duration=SLIDE_fade)";
    document.images.SLIDE_billedeBox.filters.blendTrans.Apply();
  }
  document.images.SLIDE_billedeBox.src = SLIDE_load[SLIDE_aktuel].src;
  if (document.getElementById) document.getElementById("SLIDE_textBox").innerHTML= SLIDE_text[SLIDE_aktuel];
  if (document.all) document.images.SLIDE_billedeBox.filters.blendTrans.Play();
}

function SLIDE_hastighed(SLIDE_valgt)
{
  SLIDE_speed = SLIDE_valgt.options[SLIDE_valgt.selectedIndex].value;
}
var play_val = 0;
var pause_val = 1;
function CheckKeys(){
  var key = event.keyCode;
  if (key == 32){
    if (play_val == 0) {
      document.play_img.src = slideshow_play_down.src;
      document.pause_img.src = slideshow_pause.src;
      play_val = 1;
      pause_val = 0;
      SLIDE_play();
    } else if (pause_val == 0) {
      document.play_img.src = slideshow_play.src;
      document.pause_img.src = slideshow_pause_down.src;
      play_val = 0;
      pause_val = 1;
      SLIDE_pause();
    }
    event.cancelBubble = true;
    event.keyCode = 0;
    return false;
  } else if (key == 37) {
    SLIDE_tilbage();
    event.cancelBubble = true;
    event.keyCode = 0;
    return false;
  } else if (key == 38) {
    SLIDE_fem_tilbage();
    event.cancelBubble = true;
    event.keyCode = 0;
    return false;
  } else if (key == 39) {
    SLIDE_frem();
    event.cancelBubble = true;
    event.keyCode = 0;
    return false;
  } else if (key == 40) {
    SLIDE_fem_frem();
    event.cancelBubble = true;
    event.keyCode = 0;
    return false;
  }
}
document.onkeydown = CheckKeys;
</script>

Mit spørgsmål er, om man kan sætte scriptet til kun at hente det valgte billede ("001.JPG") plus (f.eks.) de fem næste ("002.JPG","003.JPG","004.JPG","005.JPG","006.JPG") plus de fem forrige ("046.JPG","047.JPG","048.JPG","049.JPG","050.JPG") billeder?

Når scriptet går til næste billede ("002.JPG") skal det så hente "007.JPG" og smide "046.JPG" væk igen etc.

Det hele skal ske uden at siden skal reloade på nogen måde - alt skal afvikles lokalt på brugerens maskine, så siden kun skal loade én gang.

Forståeligt? Ellers må jeg prøve at uddybe mig yderligere :)
Avatar billede roenving Novice
14. september 2005 - 12:59 #1
Tjah, det kan man vel egentlig godt, men umiddelbart ville jeg tænke på først at begynde preloaden, når siden blev vist, altså starte den onload !-)

-- for der skal opbygges et nyt sæt rutiner, som så skal integreres i de forskellige funktioner i scriptet, så det kan være ret tricky ...

-- og browseren smider alligevel ikke noget ud, så det medat discarde billeder har ingen funktion !o]
Avatar billede laksen Nybegynder
14. september 2005 - 13:12 #2
Det lyder jo sådan set fornuftigt nok. Det må jeg lige se på.

Kan man på en eller anden fix måde fortælle brugeren, hvor meget siden mangler at loade? F.eks. hvor mange procent af array'et, der allerede er hentet. Alle filerne array'et henter har ca. samme størrelse.
Avatar billede roenving Novice
14. september 2005 - 13:14 #3
Tjah, du kan jo f.eks. kigge på phoenixvs avancerede preloader:

http://www.phoenixv.dk/arkiv.html, kig under billeder !-)
Avatar billede laksen Nybegynder
23. september 2005 - 15:17 #4
Jeg fik løst det ved at lave et preload vha. det foreslåede script. Siden henter de 5 første billeder, hvorefter den for de fleste forbindelser kan følge med, mens det vises.

Du hjalp mig til at komme frem til den rigtige løsning, så du kan smide et svar, hvis du vil have point :)
Avatar billede roenving Novice
24. september 2005 - 13:25 #5
Velbekomme '-)
Avatar billede roenving Novice
24. september 2005 - 13:54 #6
-- og tak for point ;~}
Avatar billede laksen Nybegynder
24. september 2005 - 13:58 #7
Det var det mindste - når et svar ender med at give løsningen på problemet, er de altid velfortjente! :)
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