Avatar billede syswatch Novice
12. februar 2007 - 14:36 Der er 7 kommentarer og
1 løsning

Ændre script til random

Hejsa..
Hvordan ændre jeg dette script så det vælger et random billede hver gang istedet for at tage det næste i rækken ?
Synes også der kommer nogle hvide prikker i billederne nogen gange, hvordan dette undgåes....

<script language="javascript" type="text/javascript">
var slideShowSpeed = 2000
var crossFadeDuration = 3
var Pic = new Array()
<?php
include("galdbcon.php");
$query2 = "select * FROM galleries WHERE domain=2 AND synlig=1 ORDER BY id DESC LIMIT 1";
$result2 = mysql_query($query2) or die(mysql_error());

if($row2 = mysql_fetch_array($result2)) {
     
$path = "/home/www/galleri/".$row2[id]."/";
$handle = opendir($path);
while (($fil = readdir($handle)) !== false) {
    if ($fil != "." && $fil != ".." && substr(strtolower($fil),-3) == "jpg") {
        $images1[] = $fil;
    }
}
closedir($handle);
$bib = $row2[id];
global $bib;
$firstpic1 = $images1[0];
global $firstpic1;
for ($i=0; $i<count($images1); $i++) {
      print "Pic[".$i."] = '/ugalleri/".$bib."/".$images1[$i]."'\n";
}
}
?>

var t
var j = 0
var p = Pic.length

var preLoad = new Array()
for (i = 0; i < p; i++){
  preLoad[i] = new Image()
  preLoad[i].src = Pic[i]
}

function runSlideShow(){
  if (document.all){
      document.images.SlideShow.style.filter="blendTrans(duration=2)"
      document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
      document.images.SlideShow.filters.blendTrans.Apply()     
  }
  document.images.SlideShow.src = preLoad[j].src
  if (document.all){
      document.images.SlideShow.filters.blendTrans.Play()
  }
  j = j + 1
  if (j > (p-1)) j=0
  t = setTimeout('runSlideShow()', slideShowSpeed)
}
</script>
Avatar billede cpufan Juniormester
12. februar 2007 - 23:40 #1
document.images.SlideShow.src = preLoad[j].src
  if (document.all){
      document.images.SlideShow.filters.blendTrans.Play()
  }
  j = j + 1
  if (j > (p-1)) j=0

ændres til:

var j = Math.round(p*Math.random())
document.images.SlideShow.src = preLoad[j].src
  if (document.all){
      document.images.SlideShow.filters.blendTrans.Play()
  }
  //j = j + 1
  //if (j > (p-1)) j=0
Avatar billede syswatch Novice
13. februar 2007 - 08:37 #2
Kanon... det var lige hvad der skulle til. Men der kommer lidt hvide prikker i nogle af billederne, er det noget man kan kode sig ud af ? Se her: www.mebsen.dk
Avatar billede syswatch Novice
13. februar 2007 - 09:45 #3
cpufan: Det virker ikke helt som det skal. Når den står og skifter billeder så lige pludselig kommer den med følgende javascript fejl:

Linje: 47
Tegn: 1
Fejl: 'preLoad[...].src' er null eller ikke et objekt
Kode: 0
URL-adresse: http://www.mebsen.dk/index.php?s=forside

Jeg kan ikke lige gennemskue hvad fejlen er, og den kommer forskellige steder hver gang.
Avatar billede cpufan Juniormester
13. februar 2007 - 12:53 #4
var j = Math.round(p*Math.random())

ændres til:

p=p-1
var j = Math.round(p*Math.random())


de hvide prikker opstår i explorer -
Avatar billede syswatch Novice
13. februar 2007 - 14:42 #5
cpufan: Det ser ikke ud til at hjælpe... !
Hele koden ser nu således ud:

<script language="javascript" type="text/javascript">
var slideShowSpeed = 2000
var crossFadeDuration = 3
var Pic = new Array()
<?php
include("galdbcon.php");
$query2 = "select * FROM galleries WHERE domain=4 AND synlig=1 ORDER BY id DESC LIMIT 1";
$result2 = mysql_query($query2) or die(mysql_error());

if($row2 = mysql_fetch_array($result2)) {
     
$path = "/home/www/galleri/".$row2[id]."/";
$handle = opendir($path);
while (($fil = readdir($handle)) !== false) {
    if ($fil != "." && $fil != ".." && substr(strtolower($fil),-3) == "jpg") {
        $images1[] = $fil;
    }
}
closedir($handle);
$bib = $row2[id];
global $bib;
$firstpic1 = $images1[0];
global $firstpic1;
for ($i=0; $i<count($images1); $i++) {
      print "Pic[".$i."] = '/ugalleri/".$bib."/".$images1[$i]."'\n";
}
}
?>

var t
var j = 0
var p = Pic.length

var preLoad = new Array()
for (i = 0; i < p; i++){
  preLoad[i] = new Image()
  preLoad[i].src = Pic[i]
}

function runSlideShow(){
  if (document.all){
      document.images.SlideShow.style.filter="blendTrans(duration=2)"
      document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
      document.images.SlideShow.filters.blendTrans.Apply()     
  }
p=p-1
var j = Math.round(p*Math.random())
document.images.SlideShow.src = preLoad[j].src
  if (document.all){
      document.images.SlideShow.filters.blendTrans.Play()
  }
  //j = j + 1
  //if (j > (p-1)) j=0
  t = setTimeout('runSlideShow()', slideShowSpeed)
}
</script>
Avatar billede syswatch Novice
14. februar 2007 - 14:13 #6
Nå, jeg valgte at gå tilbage til mit oprindelig script, og så "shuffle" php arrayet inden det blev sat ind i javascriptet, på den måde fik jeg et vilkårligt billede hver gang.
Avatar billede cpufan Juniormester
14. februar 2007 - 14:46 #7
nå - det lyder mærkeligt, -
Avatar billede roenving Novice
25. februar 2007 - 17:59 #8
Hvis du vil bruge den metode cpufan anviser, skal du bare bruge .floor() i stedet for .round() !-)

var j = Math.floor(p*Math.random())
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