Svårt med javascript [visning av slumpmässigt valda bilder från mapp]

Permalänk
Medlem

Svårt med javascript [visning av slumpmässigt valda bilder från mapp]

Hej datasnillen!

Min fråga är säkert jättedum men jag vet faktiskt inte hur jag ska lösa det här utan er hjälp.

Jag har en mapp med 600 gif-bilder i. Av dom vill jag att 6 stycken slumpvis ska komma upp på min hemsida varje gång någon öppnar den. Finns det någon av er som vet hur man skriver javascriptkod för detta?

Hälsar en förvirrad tjej

Permalänk
Medlem

Du vill inte lösa det med javascript, du vill lösa det med php/asp eller annat server-side språk.

MEN eventuellt går det att lösa ganska enkelt med javascript, t.ex. om bilderna heter bild1, bild2.. osv. då är det bara för javascriptet att sätta samman ordet bild och ett slumpnummer från 1-600. Ingen vacker lösning men det borde fungera.

Visa signatur

citera!

Permalänk
Medlem

Hej och tack för svaret!

bilderna heter 1.gif till och med 600.gif och är ganska små. Varför är lösningen inte vacker?

Permalänk
Medlem

Och hur gör man det med php och asp menar du?

Permalänk
Medlem

Varför inte javascript

1. Alla har inte javascript aktiverat
Man ska inte basera vitala funktioner för sidan på javascript. En hemsida ska gå lika bra utan som med javascript. Allt "krims krams" som inte är nödvändigt är perfekt för javascript.

2. Exponering
Du avslöjar för användaren hur många bilder det finns, vad de heter o.s.v. Det kan först se ganska oskyldigt ut och ganska bagatellartat men inom modern programmering anses det viktigt.

Dessa anser jag är de två största anledningarna att man inte skall använda javascript till det här.

Php / asp
Om du inte har gjort hemsidan i php, asp eller liknande blir det kanske lite knöligt för dig att få det att fungera, det beror på hur du hostar hemsidan.

Lösning med javascript?
Lät det jobbigt med php, asp eller liknande? Lugnt, det går att lösa det med javascript, inte vackert, men det går.

När man arbetar med javascript rekommenderar jag att man använder typ jQuery (om du nu inte redan gör det), det jQuery gör är att det kapslar in javascriptsfunktioner (du använder jQuery istället för vanliga javascript "kod"). Fördelen är att jQuery tar hand om att det fungerar i alla webbläsare, du behöver skriva mindre kod o.s.v.
Google, Dell m.m. använder jQuery.

Om man nu inte orkar med jQuery?

<img src="/tom.gif" alt="" id="_bildens_id_" /> var nummer = Math.floor(Math.random()*601); //1-600 random var bild = nummer+".gif"; document.getElementById('_bildens_id_').src=bild;

Jag har inte provat koden, men den borde fungera utan större fel.

EDIT: ett klantigt kodfel

Visa signatur

citera!

Permalänk
Medlem

Oj, tack för ett bra svar!

Men hur får man koden att plocka 6 olika bilder av de 600?

Permalänk
Medlem

Hur menar du nu?

Har du problem med att få koden att fungera och välja ut en bild?
Har du problem med att den väljer samma bild som redan visas?
Har du problem med att visa sex stycken bilder?
Har du problem med att den inte hittar några bilder?

Visa signatur

citera!

Permalänk
Medlem

Jo, jag menar att jag på något sätt måste hindra den från att ta samma bild flera gånger när den plockar de där 6 bilderna. De 6 som plockas ska vara olika bilder.

Permalänk
Medlem

<img id="minbild1" /> <img id="minbild2" /> <img id="minbild3" /> <img id="minbild4" /> <img id="minbild5" /> <img id="minbild6" /> $('#minbild1').attr('src', Math.random() * 600 + 1 + '.gif'); $('#minbild2').attr('src', Math.random() * 600 + 1 + '.gif'); $('#minbild3').attr('src', Math.random() * 600 + 1 + '.gif'); $('#minbild4').attr('src', Math.random() * 600 + 1 + '.gif'); $('#minbild5').attr('src', Math.random() * 600 + 1 + '.gif'); $('#minbild6').attr('src', Math.random() * 600 + 1 + '.gif');

Det där är den absolut enklast möjliga koden att förstå och implementera. Men den är väldigt specifik, vilket innebär att du får problem om du istället vill slumpa fram 100 bilder. Då är följande bättre, men alltså kanske överkurs i det här fallet:

Samma HTML som ovan for(var i = 0; i < 100; i++){ var bildnr = Math.random() * 600 + 1; $('#minbild' + i).attr('src', bildnr + '.gif'); }

Permalänk
Skrivet av Dosshell:

Varför inte javascript
1. Alla har inte javascript aktiverat
Man ska inte basera vitala funktioner för sidan på javascript. En hemsida ska gå lika bra utan som med javascript. Allt "krims krams" som inte är nödvändigt är perfekt för javascript.

2. Exponering
Du avslöjar för användaren hur många bilder det finns, vad de heter o.s.v. Det kan först se ganska oskyldigt ut och ganska bagatellartat men inom modern programmering anses det viktigt.

Du har kanske inte hört talats om AJAX? Det handlar om att minimera datatrafiken samtidigt som man maximerar serverkapaciteten. Kort och gott går det ut på att man endast hämtar data som behövs (i detta fallet endast bilderna) och inget annat, och detta med hjälp av XMLHttpRequest-objekt som är framtaget av W3C. Detta anser jag vara viktigt inom modern webbprogrammering, att hålla koll på vad standarder och rekommendationer säger. Summan av kardemumman är att det kan och det går att lösas med javascript. Av effektiviseringsskäl bör det lösas med javascript.

Skrivet av Dosshell:

Lösning med javascript?
Lät det jobbigt med php, asp eller liknande? Lugnt, det går att lösa det med javascript, inte vackert, men det går.

Enda nackdelen jag ser med serverside-språk är att du belastar servern mer än vad du egentligen behöver. Vid större webbsidor är det viktigt att tänka på.

Visa signatur

Moderkort: Asus Z97-PRO CPU: Intel Core i7 4790K GPU: MSI GTX 980 Gaming
RAM: A-Data 2x8GB DDR3 Chassi: NZXT H400W

Permalänk
Medlem
Skrivet av Christhebalrog:

Du har kanske inte hört talats om AJAX? Det handlar om att minimera datatrafiken samtidigt som man maximerar serverkapaciteten. Kort och gott går det ut på att man endast hämtar data som behövs (i detta fallet endast bilderna) och inget annat, och detta med hjälp av XMLHttpRequest-objekt som är framtaget av W3C. Detta anser jag vara viktigt inom modern webbprogrammering, att hålla koll på vad standarder och rekommendationer säger. Summan av kardemumman är att det kan och det går att lösas med javascript. Av effektiviseringsskäl bör det lösas med javascript.

Enda nackdelen jag ser med serverside-språk är att du belastar servern mer än vad du egentligen behöver. Vid större webbsidor är det viktigt att tänka på.

Haha, jo jag har arbetat så mycket med ajax att jag spyr på det. Utan jQuery och ape hade jag nog inte haft någon magsaft kvar...

Jag har inte sagt att det inte går att lösas med javascript, jag har ju till och med gett en lösning. Men problemet kvarstår, alla har inte javascript och att basera vitala funktioner på javascript är inte bra om man vill nå alla användare.

Att använda ajax till detta är nog det... ja, jag får ju inte bryta mot §1.1 så jag stannar nog redan här.

Visa signatur

citera!

Permalänk
Medlem
Skrivet av Dosshell:

alla har inte javascript och att basera vitala funktioner på javascript är inte bra om man vill nå alla användare

Vilken är målgruppen? Vad är en vital funktion för målgruppen? Och hur många procent i målgruppen har inte JS? Vad innebär det att inte "ha" JS, är det inte aktiverat av klienten eller stöds inte tekniken av klienten? Hur benägna är den del av målgruppen som självmant har avaktiverat JS, att aktivera JS när de besöker sidan? Hur stor del av målgruppen sitter på så annorlunda enheter eller speciella omständigheter att de inte har möjlighet till JS? Hur stor del av målgruppen måste man nå?

Man måste svara på ganska många frågor för att nå ett informerat beslut och citatet ovan är därför en felaktig generalisering. Det är idag väldigt ofta ett bra beslut att basera vitala funktioner på JS. Sedan kan man utifrån behoven prata fallbacks och graceful degradation om det är aktuellt.

Att slumpa fram 6 st bilder tycker jag låter mindre vitalt för de flesta målgrupper utan JS. För att få en bra fallback kan man fylla de första sex bilderna med bild 1-6.gif för att sedan låta JS byta src på dem.

Permalänk
Skrivet av Dosshell:

Haha, jo jag har arbetat så mycket med ajax att jag spyr på det. Utan jQuery och ape hade jag nog inte haft någon magsaft kvar...

Jag har inte sagt att det inte går att lösas med javascript, jag har ju till och med gett en lösning. Men problemet kvarstår, alla har inte javascript och att basera vitala funktioner på javascript är inte bra om man vill nå alla användare.

Att använda ajax till detta är nog det... ja, jag får ju inte bryta mot §1.1 så jag stannar nog redan här.

Personligen tycker jag inte ajax är speciellt svårt eller komplicerat så fort man förstått principen. Tilläggas skall att jag då aldrig använt jQuery, utan suttit och testat i olika webbläsare (IE och FF räcker för mig) och skriva kod som funkar enligt den givna standarden, vilket både FF och IE7+ faktiskt ganska duktiga på.

Jag såg att du skrev att det kan lösas, jag ville bara påpeka att det bör lösas med javascript för att just minimera servertrafiken. En sida upplevs ju som snabbare om man ligger steget före och hämtar all vital data för sidan en gång och sen laddar in allt annat allt eftersom (asynkront i bakgrunden).

Personligen tror jag det är en bra sak att delegera så mycket som möjligt hos klienten, det är därför jag tycker ajax är så vackert

Visa signatur

Moderkort: Asus Z97-PRO CPU: Intel Core i7 4790K GPU: MSI GTX 980 Gaming
RAM: A-Data 2x8GB DDR3 Chassi: NZXT H400W

Permalänk
Hedersmedlem

*ämnesraden redigerad*

Tänk på att alltid skriva så tydliga rubriker som möjligt.