Avatar billede triple-x Nybegynder
23. maj 2004 - 22:50 Der er 12 kommentarer og
1 løsning

Loop i javascript

Godaften Eksperten

Jeg har et javascript kørende med vare. men når det kommer til slutningen, reloader den og giver et stort hak, og i bunden skal de løbe helt ud før den reloader.

Det jeg kunne ønske mig var at det faktisk var et "bånd" der kørte rundt og rundt og rundt. uden den gav et stort hak, er godt klar over den vil give et lille hak, men ikke på samme måde som den gør nu.

Koden kan ses nedenfor.

og kan ses i funktion www.minmail.biz/martin/

<script language="JavaScript1.2">

//Specify speed of scroll. Larger=faster (ie: 5)
var scrollspeed=cache=1

function initialize(){
marqueeheight=document.all? parent.document.all.datamain.height : parent.document.getElementById("datamain").getAttribute("height")
dataobj=document.all? document.all.datacontainer : document.getElementById("datacontainer")
dataobj.style.top=5
thelength=dataobj.offsetHeight
scrolltest()
}

function scrolltest(){
dataobj.style.top=parseInt(dataobj.style.top)-scrollspeed
if (parseInt(dataobj.style.top)<thelength*(-1))
dataobj.style.top=5
setTimeout("scrolltest()",20)
}

window.onload=initialize

</script>
        <
Avatar billede roenving Novice
23. maj 2004 - 23:11 #1
?-)
Avatar billede triple-x Nybegynder
23. maj 2004 - 23:54 #2
altså på www.minmail.biz/martin/index.php er der en iframe hvor der kører en liste med tøj og sko og lign. denne liste kører op via det javascript som jeg har postet i spørgsmålet, men problemet er når der ikke er mere tøj at vise reloader den, og giver et hak.

derfor ønsker jeg en form for loop uden hak, hvis man kan sige det på den måde
Avatar billede roenving Novice
24. maj 2004 - 00:04 #3
Aha, da jeg havde kigget i længere tid og den var kørt forfra med listen flere gange, tænkte jeg, at der måtte være en forklaring ...

-- og forklaringen er altså, at du simpelthen har gentaget varerne så mange gange, at man ikke ser det straks ?-)

Tjah, hvis jeg havde sådan et mål, ville jeg sætte varerne i en stribe divs, som jeg så scrollede op og loopede igennem !-)
Avatar billede triple-x Nybegynder
24. maj 2004 - 08:38 #4
hov glemte at sige man lige skulle klikke ind på herre for at se en kort liste :)

kan du forklare din løsning? da jeg ikke helt forstår hvad du mener
Avatar billede roenving Novice
25. maj 2004 - 11:36 #5
Jeg ville lave f.eks. 6 divs, som lå inde i en anden positioneret div.

Scrolle den øverste op indtil den var forsvundet helt, slette den og appende en ny i bunden ...
Avatar billede triple-x Nybegynder
25. maj 2004 - 12:15 #6
roenving - det vil jeg helst se som en nødløsning da der så kommer et stykke tid hvor der er helt tomt af billeder...

jeg er næsten sikker på det må kunne laves i javascript så den looper uden at hakke så meget som den gør lige nu
Avatar billede roenving Novice
25. maj 2004 - 12:22 #7
Nej, ikke nogen tidspunkter, hvor der ikke er noget ...

At oprette nye objekter og appende dem er godt nok nogle af de tungeste opgaver du kan lave i javascript, så tunge, at de, hvis du skal oprette flere ad gangen, kan forvente, at det tager helt op til et millisekund !o]

Men ideen er, at der hele tiden er 6 divs, så der netop aldrig er tomt, det er kun det øverste element, som scrolles op, og når det er helt skjult, fjernes det (og det alene !-), og et nyt appendes for neden ...
Avatar billede roenving Novice
25. maj 2004 - 13:44 #8
Et eksempel:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Tomt dokument</title>
<meta name="keywords" content="søgeord adskilt af komma">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;padding:0px;border:0px;}
#container{position:relative;top:0px;width:130px;height:600px;overflow:hidden;}
.annonce{position:relative;top:0px;width:130px;height:130px;text-align:center;overflow:hidden;font-family:Verdana,sans-serif;font-size:xx-small;background:transparent;}
.annbillede{width:130px;height:100px;}
</style>
<script language="javascript" type="text/javascript">
var divs = new Array(),num=2,nr=act=initTop=0;
var container;
function init(){
  container = document.getElementById('container');
  nr=container.childNodes.length-1;
  for(i=nr;i>=0;i--){
    divs[i] = container.childNodes[i];
    divs[i].style.top = divs[i].offsetTop + 'px';
    divs[i].style.position = 'absolute';
    //alert(divs[i].offsetTop);
  }
  initTop = divs[nr].style.top;
  setInterval('moveAd()',20);
}
function moveAd(){
  for(i=0;nr>=i;i++){
    divs[i].style.top = parseInt(divs[i].style.top) - 1 + 'px';
    divs[i].childNodes[4].innerHTML = divs[i].style.top;
  }
  if(-130>parseInt(divs[act].style.top)){
    container.appendChild(container.removeChild(divs[act]));
    divs[act].style.top = initTop;
    divs[act].childNodes[3].innerHTML = num + ". ";
    act = (act+1)%(nr+1);
    num += (act==0)?1:0;
  }
}
</script>
</head>
<body onload="init();">
  <div id="container">
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 0 - </span><span></span>
      <span>a</span>
    </div>
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 1 - </span><span></span>
      <span>a</span>
    </div>
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 2 - </span><span></span>
      <span>a</span>
    </div>
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 3 - </span><span></span>
      <span>a</span>
    </div>
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 4 - </span><span></span>
      <span>a</span>
    </div>
    <div class="annonce">
      <img src="../billede.jpg" class="annbillede"><br>
      <span>Her er en tekst 5 - </span><span></span>
      <span>a</span>
    </div>
  </div>
</body>

</html>

-- husk at indsætte et billede, som du kan se, når du kigger !-)

-- de ting jeg gør med teksten er mest for at vise, at man kan ændre tingene on-the-fly, så også billeder og tekst kan ændres, når de divs skifter plads, mest hensigtsmæssigt placerer man det, man vil have i arrays !o]
Avatar billede triple-x Nybegynder
03. juli 2004 - 19:01 #9
roenving - hmm havde ikke fået mail om dette. Dog vil jeg lige bede dig ligge et svar så du kan få point :) fik lavet det ordenlig og kom ud med et 11 tal i IT/FOTO
Avatar billede roenving Novice
03. juli 2004 - 19:30 #10
Hvordan lavede du det så ?-)

Og tillykke !-)

-- og velbekomme '-)
Avatar billede triple-x Nybegynder
04. juli 2004 - 16:24 #11
roenving - det blev lavet på den måde at jeg istedet for at få den til at køre i en ring, startede den helt i toppen, når båndet var tom løb det helt ud så det var blank og startede så forfra, ikke helt optimalt. men godt nok :) for et ikke skulle opdages kopierede jeg listen 3 gange ind iefter hinanden :)
Avatar billede roenving Novice
04. juli 2004 - 16:37 #12
-- men så kan du måske få lidt inspiration til den måde, jeg har lavet det på, til fremtidige projekter !-)

-- og tak for point ;~}
Avatar billede triple-x Nybegynder
04. juli 2004 - 16:43 #13
roenving - jo mange tak.
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

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