Avatar billede Slettet bruger
26. maj 2005 - 19:27 Der er 10 kommentarer og
2 løsninger

Funktion ændres til rækkefølge istedet for random - hvordan?

Hvordan får jeg understående funktion til at vise filerne i rækkefølge istedet for random ??

<script type="text/javascript">
var flfilm = new Array();
flfilm[0] = '.....'
flfilm[1] = '.....'
flfilm[2] = '.....'
flfilm[3] = '.....'
function visFlash(){
  document.getElementById('flashFilm').innerHTML = flfilm[Math.floor(Math.random()*flfilm.length)];
}
</script>

Altså "random-halløjet" skal ændres eller fjernes, så scriptet køre filerne i numerisk rækkefølge...
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:03 #1
Sådan:

function visFlash(){

for (i=0; i< flfilm.length; i++)
{
html = html + flfilm[i];
}

  document.getElementById('flashFilm').innerHTML = html;
}


Du kan så selv bestemme, hvor dan "output"'et skal være.. du retter bare denne linie til:

html = html + flfilm[i];

/theSurfer
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:04 #2
..glemte at definere html:

function visFlash(){

var html = "";

for (i=0; i< flfilm.length; i++)
...osv...

/theSurfer
Avatar billede Slettet bruger
26. maj 2005 - 20:20 #3
øhh.. ikke forstået.. Hvorfor html, nå det er swf filer i et script ?

Scriptet ser således ud:

<html>
<head>
  <base href="http://www.url.dk">
</head>

<script type="text/javascript">
var flfilm = new Array();
flfilm[0] = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#4,0,0,0" width="770" height="88" id="triplespeed-casual" ALIGN=""><param name="SRC" value="triplespeed-casual.swf"><param name=wmode value=transparent><embed src="triplespeed-casual.swf" pluginspage="http://www.macromedia.com/shockwave/download/" type="application/x-shockwave-flash" width="770" height="88" NAME="triplespeed-casual" ALIGN="" wmode="transparent"></embed></object>'
flfilm[1] = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#4,0,0,0" width="770" height="88" id="randombox-casual" ALIGN=""><param name="SRC" value="randombox-casual.swf"><param name=wmode value=transparent><embed src="randombox-casual.swf" pluginspage="http://www.macromedia.com/shockwave/download/" type="application/x-shockwave-flash" width="770" height="88" NAME="randombox-casual" ALIGN="" wmode="transparent"></embed></object>'
flfilm[2] = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#4,0,0,0" width="770" height="88" id="balancedshake-casual" ALIGN=""><param name="SRC" value="balancedshake-casual.swf"><param name=wmode value=transparent><embed src="balancedshake-casual.swf" pluginspage="http://www.macromedia.com/shockwave/download/" type="application/x-shockwave-flash" width="770" height="88" NAME="balancedshake-casual" ALIGN="" wmode="transparent"></embed></object>'
flfilm[3] = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#4,0,0,0" width="770" height="88" id="mirror-casual" ALIGN=""><param name="SRC" value="mirror-casual.swf"><param name=wmode value=transparent><embed src="mirror-casual.swf" pluginspage="http://www.macromedia.com/shockwave/download/" type="application/x-shockwave-flash" width="770" height="88" NAME="mirror-casual" ALIGN="" wmode="transparent"></embed></object>'

function visFlash(){
  document.getElementById('flashFilm').innerHTML = flfilm[Math.floor(Math.random()*flfilm.length)];
}
</script>

<body onload="visFlash()" style="margin:0px;">

<div id="flashFilm" style="height:88px; width:770px;"></div>

</body>
</html>
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:25 #4
Jeg plejer at vælge "html" som variabel, når jeg bruger .innerHTML :-)

Du kan også bare bruge "asdas" i stedet for "html":

function visFlash(){

var asdas = "";

for (i=0; i< flfilm.length; i++)
{
asdas = asdas + flfilm[i];
}
  document.getElementById('flashFilm').innerHTML = asdas;
}

/theSurfer
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:26 #5
eller, hvad du nu vil..
Men det er jo HTML kode du udskriver.. "object"-tag'et er jo et HTML tag :-)

/theSurfer
Avatar billede Slettet bruger
26. maj 2005 - 20:31 #6
Problemet er bare at din løsning ikke holder én visning i den éne div, men derimod viser alle 4 filer på siden, som de er angivet i scriptet..?

Meningen er jo at kun en flash-fil vises af gangen, og så skifter til den næste ved opdatering af siden... (ligesom i en banner-rotation..)
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:43 #7
Jeg har læst dit spm, som at du ville have dem alle vist, og ikke en tilfældig flash fil..

men..

Man skal fortælle den, hvor lang den er kommet. Det kan man gøre f.eks. via en cookie.. man starter ved "-1", sætter en cookie med nummeret på den nuværende fil + 1.. på den måde, vil den hele tiden skifte til næste..

Forstår du hvad jeg mener, eller skal jeg prøve at lave et eksempel?

/theSurfer
Avatar billede Slettet bruger
26. maj 2005 - 20:49 #8
Der behøver vel ikke skrives cookies...

Jeg tænkte på at denne linie:

  document.getElementById('flashFilm').innerHTML = flfilm[Math.floor(Math.random()*flfilm.length)];

..skulle ændres til noget i stil med:

  document.getElementById('flashFilm').innerHTML = flfilm[num];

..hvor [num] så skal ændres til noget andet. - Ændre jeg fx [num] til 0 så vises flfilm[0] rigtigt. Så det skulle vel bare være et spørgsmål om at den køre +1 hele tiden... eller noget..?
Avatar billede thesurfer Nybegynder
26. maj 2005 - 20:56 #9
Ja, men hvor starter "+1" henne..? Den vil jo blive nulstillet, hver gange siden loades..

Den kan jo ikke huske, hvilket nummer der sidste blev brugt.. det er derfor man skal bruge en cookie..

Man kunne også bruge url, som f.eks. "nummer=0" osv.. men der er ikke særligt smart..

Websitets "hukommelse" nulstilles hver gange den loades.. derfor skal der være "et eller andet", der kan gemme på en værdi..

/theSurfer
Avatar billede Slettet bruger
26. maj 2005 - 21:27 #10
Hmm.. Du har selvfølgelig en pointe der, men hvad gik din tidliger løsning så ud på hehe..??

Så lad mig sige det på en anden måde:
Det behøver _ikke_ køre i numerisk rækkefølge, bare alle filer bliver vist én gang, før en visning gentages.

Problemet med random er, at det sommetider kan vise samme fil 2-3 gange før den springer videre til næste fil - hvilket er p*sse irreterende, da man så skal opdater flere gange for at komme videre...
Så hvis man bare kunne udtømme/vise alle 4 filer ÉN gang, inden man så samme fil igen igen....

Men hvis det ikke kan lade sig gøre uden cookies, er det sgu næsten ligemeget. (Det er jo ikke vær at skive/læse cookies for..)
Avatar billede Slettet bruger
26. maj 2005 - 22:03 #11
Hmmm.. Okay, har lige siddet og leget lidt med det, og det er da bare alt for fustrende med det random skidt der'...

theSufer:

Kan du lave mig en holdbar løsning ?

Jeg bruger i forvejen denne (understående) cookie skriver/læser til mit stylesheet. Kan vi lave noget ud af det ? - Den kan fx hedde "flash" istedet for "style". Og så noget halløj til scriptet så det ikke køre i random...

Du får 200 point i en ny tråd, ud over de 90 i denne tråd (eller må man kun give 200 ialt..??) for at lave scriptet til mig.

Her er mit cookie-halløj..:

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
      && a.getAttribute("rel").indexOf("alt") == -1
      && a.getAttribute("title")
      ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

var cookie = readCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

Jeg har fuld forståelse for, hvis du ikke lige gider lave det.. :-)

Hvad siger du ??
Avatar billede Slettet bruger
26. maj 2005 - 23:00 #12
Nå, bare glem det! Jeg prøver noget andet...: http://www.eksperten.dk/spm/621050

Vi deler pointene... (som tak for din deltagelse) Hygge...

/Lukket
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