18. oktober 2004 - 13:11Der er
61 kommentarer og 1 løsning
Skift billede og tekst tilfældigt hver dag!
jeg leder efter et skript der hver dag kl 00:00 skifter billede til et andet helt tilfædigt billede; og næste dag skifter det billede igen til et helt tilfædigt andet billede
og neden under skal en tekst også skifte helt tilfældigt hver dag kl 00:00..
Er der nogen der kan hjælpe med et script der kan det?
Hvis ALLE bruger skal se det samme billede hele dagen, så skal du lave det serverside, ikke med javascript der jo er clientside.
Du kunne lave noget i denne retning: Du har 365 billeder, og du navngiver dem tilfældigt 1.gif, 2.gif .... 365.gif Og så viser du 1.gif d. 1. jan, 2.gif d. 2. jan osv.
Vi kunne sagtens få vist det samme 'pseudo-tilfældige' billede hos alle brugere uden brug af DB - men teksten havde jeg overset. Det kan sagtens lade sig gøre, men så begynder det at blive lidt smartere med en DB :)
"Du kunne lave noget i denne retning: Du har 365 billeder, og du navngiver dem tilfældigt 1.gif, 2.gif ...."
Det var netop en "clientside" løsning jeg mente.
kimmys > hvis billederne navngive tilfældigt, så vil der også vises et tilfældigt billede, blot på den måde at alle billeder bliver vist, men i tilfældig rækkefølge.
Vil du hellere have det HELT tilfældigt, så kan du jo risikere at samme billede bliver vist 10 dage i træk
var arrBilleder = var arrBilleder = new Array(); arrBilleder[0] = "img1.gif"; arrBilleder[1] = "img2.gif"; arrBilleder[2] = "img3.gif"; arrBilleder[3] = "img4.gif"; arrBilleder[4] = "img5.gif"; osv
så skal du bruge et tal mellem 0 og 14;
var intAntal = 15; var dtmDato = new Date(); var dtmMidnight = new Date(dtmDato.getYear(), dtmDato.getMonth(), dtmDato.getDate()); var dtmStartDate = new Date(2000, 1, 1); var intNumber = Math.round((dtmMidnight.valueOf() - dtmStartDate.valueOf())/86400000) % 15;
Aheeem .... der er vist ikke ligefrem tale om overdreven tilfældighed :)
function bla() { var intAntal = 15; var dtmDato = new Date(); var s = ""; for ( i=0; i<12; i++ ) { // Set a month for ( j=1; j<32; j++ ) { // Set a date var dtmMidnight = new Date(dtmDato.getYear(), i, j); var dtmStartDate = new Date(2000, 1, 1); var intNumber = Math.round((dtmMidnight.valueOf() - dtmStartDate.valueOf())/86400000) % 15; s += intNumber + "\n"; } } alert(s); }
ldanielsen's eksempel er der ikke nogen tilfældighed i. Det bladrer bare de 15 billeder og tekster igennem - dag for dag i samme rækkefølge. Er det, hvad du ønsker? Så kan det gøres betydeligt lettere.
Skal der bladres i tilfældig rækkefølge, skal du have et andet script.
var arrBilleder = new Array(); arrBilleder[0] = "img1.gif"; arrBilleder[1] = "img2.gif"; arrBilleder[2] = "img3.gif"; arrBilleder[3] = "img4.gif"; arrBilleder[4] = "img5.gif";
var intAntal = 15; var dtmDato = new Date(); var dtmMidnight = new Date(dtmDato.getYear(), dtmDato.getMonth(), dtmDato.getDate()); var dtmStartDate = new Date(2000, 1, 1); var intNumber = Math.round((dtmMidnight.valueOf() - dtmStartDate.valueOf())/86400000) % intAntal;
Du skal naturligvis sørge for, der er 15 tekster og 15 billeder i de to arrays. Et par gange om året vil det kunne forkomme, at der kommer samme tekst/billede to dage i træk - men ikke mere. Til gengæld bladrer du ikke bare en liste igennem - men efterligner tilfældighed temmelg godt :)
kimmys > rigtigt, men som sagt; 15 billeder betyder at du skal have 15 linier, fra 0 til 14, ok?
olebole > Har alle billeder lige stor chance for at blive trukket? Og selvom man gør som du siger, så kan man alligevel sige at forløbet er fastlagt på forhånd, ikke? Du har lavet en funktion der tilsyneladende kommer med et tilfældigt tal, var det så ikke bedre at lave en funktion der én gang for alle genererer en række tal mellem 0 og 14, og så bruge den.
var arrBilleder = new Array(); arrBilleder[0] = "img1.gif"; arrBilleder[1] = "img2.gif"; arrBilleder[2] = "img3.gif"; arrBilleder[3] = "img4.gif";
var dtmDato = new Date(); var dtmMidnight = new Date(dtmDato.getYear(), dtmDato.getMonth(), dtmDato.getDate()); var dtmStartDate = new Date(2000, 1, 1); var intNumber = Math.round((dtmMidnight.valueOf() - dtmStartDate.valueOf())/86400000);
Det er absolut muligt at ændre, hvis det er vigtigt, at det ikke følges ad (og det vil stadig være sådan, at den samme kombination vil komme den 19. i hver måned, men det vil være svært at genkende !-)
-- men hver gang du komplicerer, vil vi jo tilføre potentielle fejl-muligheder, så hvis det umiddelbart virker (og virker rimeligt fornuftigt !-), kan vi jo bruge det gamle ord: 'If it ain't broken, don't fix it' !o]
jeg har jo 15 billeder.. sætter bare de samme billeder ind igen, men giver dem andre navne fx img18.gif.. men laver 15 nye forskellige tekster med andre navne .. så må det da blive blandet godt??
Næh, det vil jo også være usandsynligt, at en bruger kommer præcis den 19. flere måder i træk, og ikke når at komme på andre dage, hvor bare een af de billeder eller tekster, som kommer den dag, er kommet i en anden kombination ...
Nej, for uger findes jo uafhængigt af månedsnumre og datoer, og hvis det skal følge uger skal det vel ikke skifte den 1. også, hvilket en simpel tilpasning ville give ...
jeg bruger: function getRandPic() { var aRand, tmp, nD, myD, myM; aRand = [9,6,30,14,16,24,2,4,11,7,25,0,9,1,28,21,12,17,13,10,3,14,20,7,13,5,6,18,26,8,10,8,27,3,5,12,22,0,11,19,29,1,5,4,23,2]; nD = new Date(); myM = nD.getMonth()+1; myD = nD.getDate(); for ( i=0; i<myM; i++) { tmp = aRand.shift(); aRand.push(tmp); } return { "pic":"<img src=\"" + arrBilleder[aRand[myD]] + "\">", "txt":arrTekster[aRand[aRand.length-myD]] }; } var randPic = getRandPic();
Som du kan se har jeg tilføjet lidt tal i function getRandPic() { var aRand, tmp, nD, myD, myM; aRand = op til 30.. ved ikke om det er mig.. men ellers synes jeg ikke der blev udtrukket nogle billeder eller tekster efter 15.. hvis du forstår.. har nemlig 30 billeder og tekster nu
Jeg trækker bare ugedagen fra, så bliver nD altid den foregående søndag. Vil du have at det skal blive en anden dag lægger du bare et antal dage til. Jeg lægger her 6 til og tager modulus 7 af det så det altid skifter en mandag:
"ved ikke om det er mig.. men ellers synes jeg ikke der blev udtrukket nogle billeder eller tekster efter 15.. hvis du forstår.. har nemlig 30 billeder og tekster nu" Er det bare mig eller?
"Som du kan se har jeg tilføjet lidt tal i function getRandPic() { var aRand, tmp, nD, myD, myM; aRand = op til 30.. ved ikke om det er mig.. men ellers synes jeg ikke der blev udtrukket nogle billeder eller tekster efter 15.. hvis du forstår.. har nemlig 30 billeder og tekster nu"
Men jeg vil bare vide om jeg bare kan blive ved med at indsætte tal i "i function getRandPic() { var aRand, tmp, nD, myD, myM; aRand = [9,6,.....]"
I forhold til hvor mange billeder og tekster jeg har??
Ja, så længe du fylder tal i virker rigtigt, det har du da ret i. Hvis det ikke ændrer sig særlig tit er det måske ok?
I virkeligheden skulle olebole vel svare, det er hans opfindelse. Jeg forstår stadig ikke hvordan det kan lade sig gøre at alle billeder har lige stor "chance" i hans funktion.
-- ideen i oleboles er, at man har en rækkefølge fra starten, den skubbes, så de første x billeder lægges bagest, hvor x er månedsnummeret, og derefter tages det billede, som efter den øvelse står på den plads, som svarer til dagen ...
-- scramblingen af rækkefølgen vil kun for alvor kunne ses af de, som kender rækkefølgen af billederne på serveren !-)
Okay.. Men jeg skal bare forsætte med at sætte tal ind i aRand = [9,6,.....]" hvis jeg tilføjre billeder og tekst.. Det kan jeg da finde ud af :) bare det virker.. så er jeg glad.. Olebole.. kommer du ikke snart igen..
Synes godt om
Ny brugerNybegynder
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.