Avatar billede The Real Yoda Juniormester
14. august 2001 - 09:48 Der er 28 kommentarer og
1 løsning

billeder skal skifte

Jeg skal til at lave noget hvor jeg skal have nogle billeder til at skifte efter forskellige tidspunkter...

det kan vel ikke være så svært eller hvad?

det bliver noget i stil med at 1 billed skal være der i 10 sekunder, andet billed i 20 sekunder 3 billed i 5 sekunder osv osv

det er noget som bliver database drevet, så det ville være fedt hvis dataene er nemme at taste ind osv osv...

f.eks:

billed=\"picture1.jpg,picture2.jpg,picture3.jpg\"
time=\"10,20,5\"

skrives i topopen af siden, og så kører det bare derudaf...

jeg synes ikke det lyder så svært, men så i gen... jeg er en nød til javascript... (stinker virkeligt grumt)

der er selvfølgelig flere end disse 60 points for en fuldførelse af opgaven (op til 600 ekstra.. hvis det ikke er nok må der jo $$$ ind i billedet) de 60 points er bare for at tage opgaven...

//therealyoda
Avatar billede senj Nybegynder
14. august 2001 - 09:57 #1
Skal det være fra en database?
Avatar billede The Real Yoda Juniormester
14. august 2001 - 09:59 #2
tjae... alstå billederne skal ikke ligge i en database hvis det er det du mener... de skal bare lige i en mappe!

men dataene, om hvilke billeder der skal bruges og i hvor lang tid... det henter jeg fra en database...

og lige en anden ting... den skal preloade billederne og ikke skifte selv om tiden er gået hvis ikke billedet er loadet...  hvis det kan lade sig gøre
Avatar billede senj Nybegynder
14. august 2001 - 10:00 #3
Så tror jeg bare jeg er med på en lytter!
Avatar billede roenving Novice
14. august 2001 - 10:00 #4
Jamen ;-]

<script language=\"Javascript\">
var billeder = new Array(\"picture1.jpg\",\"picture2.jpg\",\"picture3.jpg\");
var tid = new Array(10,20,5);
var tael = 0;
var antalBilleder = 3;

function billedSkift () {
  document.elements[\'imgNavn\'].src=billeder[tael];
  denneTid = tid[tael];
  tael++
  if (tael=antalBilleder) tael = 0;
  setTimeout(billedSkift, 1000*denneTid);
}
</script>
Avatar billede roenving Novice
14. august 2001 - 10:03 #5
>>senj -- en lytter kommer du med på hvis du \'Udfør\'er en tom kommentar

>>therealyoda

Du skal selvfølgelig angive stien til dine billeder, men det gør du vel i forvejen

- og så havde jeg jo lige glemt:
f.eks. i <body ... onLoad=\'billedSkift();\'>
Avatar billede The Real Yoda Juniormester
14. august 2001 - 10:10 #6
ok roenving... jeg bikser lidt med det... nok først i morgen...

hvor mange points vil du have for den der?
(hvis altså min low-level-javascript-mind kan få det til at virke)
Avatar billede roenving Novice
14. august 2001 - 10:12 #7
Ups ...

Jamen, jeg skal da kun have points for lige at kunne lave funktionen --- men der var lige en áf de fejl, som er katastrofale *nogle* steder ;-]

<script language=\"Javascript\">
var billeder = new Array(\"picture1.jpg\",\"picture2.jpg\",\"picture3.jpg\");
var tid = new Array(10,20,5);
var tael = 0;
var antalBilleder = 3;

function billedSkift () {
  document.elements[\'imgNavn\'].src=billeder[tael];
  denneTid = tid[tael];
  tael++;
  if (tael=antalBilleder) tael = 0;
  setTimeout(billedSkift, 1000*denneTid);
}
</script>
Avatar billede The Real Yoda Juniormester
14. august 2001 - 10:17 #8
ok... indrømmet... kunne ikke holde fingrene fra det...

resultat:

<html>
<head>
<title>ny test</title>
</head>
<script language=\"Javascript\">
var billeder = new Array(\"stream100.gif\",\"stream1002.gif\",\"stream250.gif\");
var tid = new Array(10,20,5);
var tael = 0;
var antalBilleder = 3;

function billedSkift () {
  document.elements[\'tester\'].src=billeder[tael];
  denneTid = tid[tael];
  tael++
  if (tael=antalBilleder) tael = 0;
  setTimeout(billedSkift, 1000*denneTid);
}
</script>
<body bgcolor=\"#FFFFFF\" text=\"#000000\" onLoad=\'billedSkift();\'>
<img src=\"stream050.gif\" name=\"tester\">
</body>
</html>

giver fejlen: \'document.elements.tester\' er null eller ikke et object

hvof det?
Avatar billede The Real Yoda Juniormester
14. august 2001 - 10:18 #9
ups.. prøver lige billedescript v1.2  :-)
Avatar billede The Real Yoda Juniormester
14. august 2001 - 10:19 #10
hmmm alligevel samme fejl...  ARGH...  jeg lille-javascript-hjerne..  øh hjælp!?
Avatar billede The Real Yoda Juniormester
14. august 2001 - 10:21 #11
går ud fra at det er mit IMG tag der er noget i vejen med eller hvad? 
Avatar billede roenving Novice
14. august 2001 - 11:11 #12
Hvis du tester det i IE 4+ kan du prøve:

<html>
<head>
<title>ny test</title>
</head>
<script language=\"Javascript\">
var billeder = new Array(\"stream100.gif\",\"stream1002.gif\",\"stream250.gif\");
var tid = new Array(10,20,5);
var tael = 0;
var antalBilleder = 3;

function billedSkift () {
  document.all[\'tester\'].src=billeder[tael];
  denneTid = tid[tael];
  tael++
  if (tael=antalBilleder) tael = 0;
  setTimeout(billedSkift, 1000*denneTid);
}
</script>
<body bgcolor=\"#FFFFFF\" text=\"#000000\" onLoad=\'billedSkift();\'>
<img src=\"stream050.gif\" name=\"tester\">
</body>
</html>

Selv om jeg er lidt usikker på min references brug af ordet id-property -- andetsteds er det nemli klargjort at id- og name-properties bruge samme plads på et objekt, men måske skal du tilføje en id-property ?~]
Avatar billede The Real Yoda Juniormester
14. august 2001 - 11:20 #13
ok... det virker og det virker ikke...

den skifter nu billedet ud med stream100.gif , og ingen fejl, men den skifter ikke videre fra stream100.gif til stream1002.gif...

som om tælleren ikke tæller... ?
Avatar billede roenving Novice
14. august 2001 - 11:23 #14
Uff ... jeg kom til at gentage min fejl fra først =·[

  tael++;

og så er det fornuftigt at gøre det rigtigt her også:

  setTimeout(billedSkift(), 1000*denneTid);

hth
jes
Avatar billede The Real Yoda Juniormester
14. august 2001 - 14:41 #15
hehehe  nu siger den at \"der ikke er mere stack-plads\" og \"stack overflow at line :0\"
Avatar billede roenving Novice
14. august 2001 - 14:55 #16
Ups ...

-og sammenligningdsoperatoren er == , så

if (tael==antalBilleder) tael = 0;
Avatar billede The Real Yoda Juniormester
14. august 2001 - 15:13 #17
stadigvæk fejl, med ikke mere stackplads og overflow...

sig mig-... tester du overhovedet det du skiver???  :-)  hehe
Avatar billede jakoba Nybegynder
14. august 2001 - 15:15 #18
stakplads fejlen kommer af mangel på apostroffer:
    setTimeout(billedSkift(), 1000*denneTid);
skal være:
    setTimeout(\"billedSkift()\", 1000*denneTid);

uden apostroffer bliver funktionen billedskift startet igen med det samme, osv,
Avatar billede roenving Novice
14. august 2001 - 15:28 #19
Ahae

ja der er nogen detaljer rundt omkring =·/

og, nej jeg har desværre ikke adgang til at teste ret meget her på arbejdet -- såeh, der ryger en enkelt finke af og til ...
Avatar billede The Real Yoda Juniormester
14. august 2001 - 15:38 #20
ok... kigger på det senere i dag!
Avatar billede The Real Yoda Juniormester
15. august 2001 - 15:24 #21
ok... da jeg rettede det til
setTimeout(\"billedSkift()\", 1000*denneTid);

kom der ingen fejl, men billederne skifter heller ikke!

Avatar billede jakoba Nybegynder
15. august 2001 - 16:07 #22
Jej har samlet rettelserne og det virker fint:

<html>
<head><title>Roenving\'s variabel-tid slideshow</title>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
</head>
<script language=\"Javascript\">
var billeder = new Array(\"stream100.gif\",\"stream1002.gif\",\"stream250.gif\");
var tid      = new Array(10,20,5);

var tael = 0;
function billedSkift () {
alert( \"billedskift kaldt. tæl=\"+tael+\" nyt pic=\"+ billeder[tael] );
  document.images[\'tester\'].src=billeder[tael];
  denneTid = tid[tael];
  tael++;
  if (tael==tid.length) tael = 0;
  setTimeout(\"billedSkift()\", 1000*denneTid);
}

var preImgs = new Array();        // preload billederne
for (var i=0; tid.length>i; i++ ) {
    preImgs[i] = new Image()
    preImgs[i].src = billeder[i];
}

</script>
<body bgcolor=\"#FFFFFF\" text=\"#000000\" onLoad=\'billedSkift();\'>
<img src=\"stream050.gif\" name=\"tester\" width=45 height=45>
<!-- WebWriter AutoDato -->Opdateret: 15.8.2001<!-- WW -->
</body>
</html>

mvh JakobA
Avatar billede roenving Novice
15. august 2001 - 16:10 #23
Va\' s.... så er jeg også kommet i titellinjen ;~}
Avatar billede jakoba Nybegynder
15. august 2001 - 16:25 #24
Ups. den linie med alert skal væk nu det ikke er debug mere
  alert( \"billedskift kaldt. tæl=\"+tael+\" nyt pic=\"+ billeder[tael] );
slettes eller skriv // foran:
  //alert( \"billedskift kaldt. tæl=\"+tael+\" nyt pic=\"+ billeder[tael] );

roenving >> Jep. så du bærer det fulde ansvar :-))

mvh JakobA
Avatar billede roenving Novice
15. august 2001 - 16:26 #25
Ufff . <=;·))
Avatar billede The Real Yoda Juniormester
16. august 2001 - 09:47 #26
Det må jeg sgu sige....

Jeg kunne ikke få det til at virker før, men med den opsamling, der virker der sgu...

hmmm som sagt... ikke en haj til javascript..

Lidt ked af at jacoba ikke har svaret, så han kunne få lidt points, men mange tak for hjælpen...

her kommer så de 60 points til ldanielsen

tak endnuen gang... begge to!
Avatar billede The Real Yoda Juniormester
16. august 2001 - 09:47 #27
og pointsne er selvfølgelig til roenving  DAH!
Avatar billede jakoba Nybegynder
16. august 2001 - 18:14 #28
Ups. Så lige din kommentar 14/08 2001 09:59:37 \"ikke skifte selv om tiden er gået hvis ikke billedet er loadet...\"

Det er hurtigt tilføjet, men ikke helt pålideligt i nyere IE.
funktionen  billedskift()  skrives om til:

function billedSkift () {
  if ( preImgs[tael].complete ) {
    document.images[\'tester\'].src=billeder[tael];
    denneTid = tid[tael];
    tael++;
    if (tael==tid.length) tael = 0;
    setTimeout(\"billedSkift()\", 1000*denneTid);
  } else {
    setTimeout(\"billedSkift()\", 500); // vent lidt endnu
  }
}

mvh www.fotx.net/JakobA
Avatar billede roenving Novice
16. august 2001 - 23:40 #29
Godt set jakob
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