Avatar billede Slettet bruger
28. september 2009 - 20:26 Der er 6 kommentarer og
1 løsning

Tilfældige billeder i et slideshow

Jeg har et element, der viser billeder i et slideshow. Hvordan får jeg den sat (og er det muligt), så den viser billederne i tilfældig rækkefølge for hver upload?


openside(" ");
?>
<table border="0" cellspacing="0" cellpadding="0" height="400" align="center">
<tr>
<td>
<script language="JavaScript1.2">

var variableslide=new Array()

//variableslide[x]=["path to image", "OPTIONAL link for image", "OPTIONAL text description (supports HTML tags)"]


variableslide[0]=['/images/assensvej.jpg', 'http://assensvej.dk', 'tekst']
variableslide[1]=['/images/groennerammer.png', '', '']
variableslide[2]=['images/Hund.png', '', '']








//configure the below 3 variables to set the dimension/background color of the slideshow

var slidewidth='513px' //set to width of LARGEST image in your slideshow

var slideheight='385px' //set to height of LARGEST iamge in your slideshow, plus any text description
var slidebgcolor='##EDEDED'

//configure the below variable to determine the delay between image rotations (in miliseconds)
var slidedelay=4000

////Do not edit pass this line////////////////

var ie=document.all
var dom=document.getElementById

for (i=0;i<variableslide.length;i++){
var cacheimage=new Image()
cacheimage.src=variableslide[i][0]
}

var currentslide=0

function rotateimages(){
contentcontainer='<center>'
if (variableslide[currentslide][1]!="")
contentcontainer+='<a target="_blank" href="'+variableslide[currentslide][1]+'">'
contentcontainer+='<img src="'+variableslide[currentslide][0]+'" border="0" vspace="0">'
if (variableslide[currentslide][1]!="")
contentcontainer+='</a>'
contentcontainer+='</center>'
if (variableslide[currentslide][2]!="")
contentcontainer+=variableslide[currentslide][2]

if (document.layers){
crossrotateobj.document.write(contentcontainer)
crossrotateobj.document.close()
}
else if (ie||dom)
crossrotateobj.innerHTML=contentcontainer
if (currentslide==variableslide.length-1) currentslide=0
else currentslide++
setTimeout("randomimages()",slidedelay)
}

if (ie||dom)
document.write('<div id="slidedom" style="width:'+slidewidth+';height:'+slideheight+'; background-color:'+slidebgcolor+'"></div>')

function start_slider(){
crossrotateobj=dom? document.getElementById("slidedom") : ie? document.all.slidedom : document.slidensmain.document.slidenssub
if (document.layers)
document.slidensmain.visibility="show"
rotateimages()
}

if (ie||dom)
start_slider()
else if (document.layers)
window.onload=start_slider

</script>
</td>
</tr>
</table>
<?

closeside();
Avatar billede tjens Nybegynder
28. september 2009 - 21:24 #1
Ja, du kan jo flytte linierne over i en anden array, under brug af random()

Herunder et eksempel der blander et spil kort.

Den første fjerdel danner et spil kort sorteret.

Herefter flyttes kortene 1 efter 1 til en anden array, hvor de vælges med random.

De sidste 2 linier flytter kortet og markerer at kortet er taget.

Hvis et kort er taget findes det nærmeste i de rutiner der er markeret search up og search down

function newDeck() {
    var x = 0;
    var sDeck = new Array (52);
    var colors = new Array('c', 's' , 'h' , 'd');
    var cards = new Array('A', 'K' , 'Q' , 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2');
    for (color in colors) {
        for ( card in cards ) {
            sDeck[x] = cards[card] + colors[color];
            x++
        }
    }
    Deck = new Array(52); // Global var
    for (var i = 0; i < 52; i++ ) {
        x = parseInt( Math.random() * 52 );
        var y=x;
        if (sDeck[x]=='X') {
            for (var j = x+1; j < 52; j++) { // search up
                if (sDeck[j]!='X') {
                    y=j;
                    j=53; //    break;
                }
            }
            if (y == x) {
                for (var j = x-1; j > -1 ; j--) { // search down
                    if (sDeck[j]!='X') {
                        y=j;
                        j=-1; //    break;
                    }
                }
                if (y == x) {
                    alert("Error in newDeck: Mix routine malfunction");
                }           
            }
        }
        Deck[i] = sDeck[y];
        sDeck[y] = 'X';
    }
}
Avatar billede Slettet bruger
28. september 2009 - 21:27 #2
Det skal nok passe, men så kvik er jeg desværre ikke til koder. Kan jeg slet ikke få sat sammen og alt det der.
Avatar billede tjens Nybegynder
28. september 2009 - 22:25 #3
OK, her er en simplere udgave, som passer ind i din kode:

    var l = variableslide.length;
    for (var i = 0; i < l; i++) {
        var temp = variableslide[i];
        var r = parseInt(Math.random() * l);
        variableslide[i] = variableslide[r];
        variableslide[r] = temp;
    }
Avatar billede Slettet bruger
28. september 2009 - 22:45 #4
Mange tak - så må jeg prøve mig frem hvor det skal indsættes.

Smider du et svar så du kan få point?
Avatar billede Slettet bruger
28. september 2009 - 22:49 #5
Kan det passe, at den KUN skifter ved upload nu?? Jeg havde den egentlig til at skifte efter et vis interval.
Avatar billede tjens Nybegynder
28. september 2009 - 22:57 #6
Det skal sættes efter linien, hvor det sidste billede tilføjes variableslide-arrayet. Der hvor der er nogen blanke linier i dit originale spørgsmål.

#5 Det burde ikke kunne ødelægge en timerfunction, hvis den virkede før de få linier blev tilføjet.
Avatar billede Slettet bruger
28. september 2009 - 23:04 #7
Jeg må så prøve igen, men synes nu ikke rigtig jeg kan få den til det. Men virkede ihvertfald før, og kommer det også til nu . Mange tak for hjælpen ;)
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