ugrás a tartalomhoz

Véletlenszerű háttérkép (random background) CSS-ből?

Moon · 2008. Jan. 2. (Sze), 07.58
Sokszor rákeresve több PHP megoldást találtam arra, hogy véletlenszerűen változzon a háttérkép minden betöltésnél. Nálam valamiért egyik sem működött, nyilván ennek legfőbb oka az, hogy nagyon kezdő vagyok. De az is lehet, hogy ezek a megoldások nem arra valók, amire nekem kell, ugyanis egy demo DVD-t kell írnom, amin fejezetenként külön mappákban vannak a háttérképek és mindezt egy, a DVD-re másolt Easy Prezentation nevű hordozható böngésző jeleníti majd meg, ami ha jól értem az IE-t használja. (Ezért értelemszerűen kizárt minden olyan megoldás, ami fájlok átnevezésével, vagy tartalmuk megváltoztatásával próbálkozik.) Ilyent még sohasem kellett csinálnom...

Olyan megoldásra van szükségem, amire a CSS fájlból hivatkozhatok és egy adott könyvtárban lévő összes képfájl közül választ véletlenszerűen. Azok a módszerek, ahol a HTML fájlba kell szkriptet beilleszteni, sajnos nem jók, mert nagyon sok a fájl és a képek neve is fejezetenként más-más. Mindenképp a CSS-ből kell megoldanom, mert a stíluslapoknak minden fejezetnél azonos a fájlneve és a tartalma, így gond nélkül bemásolhatók bárhová. A képek mérete egyforma és a mappáik relatív útvonala is mindenhonnan azonos, ha csak ez kell a random-generáló PHP fájlnak.

Minden oldal eleje így néz ki
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">  
  2. <HTML lang="hu-HU">  
  3. <HEAD>  
  4. <TITLE>Demo DVD Project</TITLE>  
  5. <META content="hu-HU" name=content-language>  
  6. <META http-equiv="Content-type" content="text/html; charset=iso-8859-2">  
  7. <LINK href="stilus.css" rel=stylesheet type="text/css">  
  8. <LINK rel="shortcut icon" href="icon.ico">  
  9. <STYLE type=text/css>@import url( "stilus.css" );  
  10. </STYLE>  
  11. </HEAD>  
  12. <BODY class=demodvd>  
A stilus.css-ben most még ez van:
  1. BODY.demodvd {BACKGROUND: rgb(250,250,150url('bg001.jpg'scroll top left no-repeat}  
Olyanokkal próbálkoztam, ahol egy PHP fájlt kellett bemásolni a képek könyvtárába és a kép helyett erre a fájlra kellett hivatkozni. De se a HTML-be próbaként beillesztett sima <IMG src="rnd-bg.php"> se a CSS-ből url('rnd-bg.php') nem működött, se Easy Prezentation-ben, se Firefox-ban. Lehet, hogy valami sokkal alapvetőbb hibát vétettem? Van erre megoldás PHP-ben, Javascript-ben, vagy bármiben? Aki csinált már ilyent, annak a segítségét kérem.
 
1

Ne csináld...

janoszen · 2008. Jan. 2. (Sze), 08.33
Ne csináld, ne szivasd a felhasználót. Minden alkalommal, amikor letöltődik a lap, a felhasználónak meg kell várnia az 50-60 k-s random képed lecsöpögését és legkésőbb a harmadik újratöltésnél kezd kib* idegesítő lenni.

Egyébként meg az a megoldása a dolognak, hogy fönttartasz x db stylesheetet x db háttérkép hivatkozással és az azokra való hivatkozást (link) véletlenszerűen pakolgatod be PHP-ból a head-be.
2

css expressions

razielanarki · 2008. Jan. 2. (Sze), 08.48
ha valóban az IE motorja fut a programban, akkor használd az 'expression' tulajdonságot a háttérkép beállítására. (IE 5.0+)
(ugye én értem jól, hogy ez nem a webre készül hanem valamiféle dvd-s prezentáció lesz?)

lényegében meg tudsz adni egy kis js kódrészletet cssből.

pl: (feltételezve hogy a back0.jpg .. back9.jpg képek közül akarsz választani - nem ellenőrizem csak hasból írom)
  1. background-image: expression ("url('back"+(Math.floor(Math.random()*10))+".jpg')");  
és végül egy itt egy leírás
3

egy megoldás

griphons · 2008. Jan. 2. (Sze), 09.05
Bár egyetértek proclubbal, ez egy idő után tényleg idegesítővé válhat, de mivel ez egy amolyan prezentáció-féleségnek készül, és nem webre, ezért szerintem nem lesz gond.

A body stílusát ne stíluslapból vedd, hanem a head részben határozd meg, így beszúrhatsz php scriptet, ami módosítja a háttérképet. Önálló stíluslapban ugye ez nem működik, nem működhet.

Példa:
  1. # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">    
  2. <HTML lang="hu-HU">    
  3. <HEAD>    
  4. <TITLE>Demo DVD Project</TITLE>    
  5. <META content="hu-HU" name=content-language>    
  6. <META http-equiv="Content-type" content="text/html; charset=iso-8859-2">    
  7. <STYLE>  
  8.   body.demodvd {background: url(<?php include "rnd-bg.php"; ?>);}  
  9. </STYLE>  
  10. <LINK href="stilus.css" rel=stylesheet type="text/css">    
  11. <LINK rel="shortcut icon" href="icon.ico">    
  12. <STYLE type=text/css>@import url( "stilus.css" );    
  13. </STYLE>    
  14. </HEAD>    
  15. <BODY class=demodvd>  
Persze a stilus.css-t linkelheted uyanúgy, hogy a többi formázási beállítást abból vegye az oldal (a body ne szerepeljen, mert akkor a head-ben hiába bűvölöd).
Az rnd-bg.php pedig tartalmazhatja a random generálást, visszaadva a kiválasztott kép abszolút url-jét pl: "backgrounds/bg_001.jpg".

rnd-bg.php példa:
  1. <?php  
  2. $hattermappa = "backgrounds";  
  3. $hatterek = array();  
  4. $ndx = 0;  
  5. $handle = opendir($hattermappa);  
  6. while (false !== ($file = readdir($handle))) {  
  7.     $hatterkep=$hattermappa."/".$file;  
  8.     if (is_file($celpont)) {  
  9.         $katterek[$ndx]=$hatterkep;  
  10.         $ndx++;  
  11.     }  
  12. }  
  13. closedir($handle);  
  14. shuffle($hatterek);  
  15. echo $hatterek[0];  
  16. ?>  
4

Hmm...szerver is fut a gépen?

Ronyn · 2008. Jan. 2. (Sze), 18.09
Mert ha nem,vagy nem a cd lejátszo van beállitva webrootnak,akkor a phpfuttatás nem igazán fog menni??
Akkor marad a js,amit ugye a bongészö futtat...
5

ja tényleg

griphons · 2008. Jan. 3. (Cs), 08.47
Ez mondjuk igaz, tehát php csak akkor fog lefuni, ha a szerver értelmezi azt.
Én azért írtam php-s megoldást, mert az alapkoncepcióban szerepelt ez a lehetőség. Bár én láttam már olyan wysiwig szekesztőt, ami webszerver nélkül is futtatta a php-s weboldalt (hideg rázott tőle), végülis ez benne lehet egy prezentációs progiban is...
(Amúgy a kódban a $celpont az $hatterkep, csak elirtam bocsi)
6

talán a javascript...? ...de hogyan?

Moon · 2008. Jan. 4. (P), 02.06
Köszönöm a hozzászólásokat. Közben tovább kísérleteztem a demo DVD-vel és még több módszerről derítettem ki, hogy nem nyerő. :(
proclub: Ez sajnos nem az első olyan feladat, amire én is azt mondom elsőre, hogy "Ne csináld", és nyilván nem is az utolsó, amikor ezt nem engedhetem meg magamnak. :)
razielanarki: Ez egy nagyon szimpatikus megoldás! Sajnos sehogy sem bírtam működésre, pedig ez lett volna a legegyszerűbb.
griphons: Attól tartok, hogy Ronyn sejtése bejött, mert sajnos semmilyen PHP módszer nem működött. Akármilyen béna vagyok, a pontosan megadott kódodat akkor sem tudtam volna elszúrni, mégsem működött, ez nyilván az Easy Prezentation hibája. ($katterek rögtön észrevettem, javítottam.) Bocs, ha félreérthető voltam, a PHP nem volt kikötés, csak először olyan megoldásokat találtam, pl. Random Image Rotation.

Találtam egy javascript-et, amivel ugyan cserélődik a háttér, viszont a többi rá vonatkozó beállítás (scroll top left no-repeat) elveszik, és az oldal szétesik. :( Ha ezeket nem adhatom meg CSS-ben, akkor hogyan tehetem a HTML fájlba? A nem háttérképre vonatkozó BODY beállítások azért jöhetnek a CSS-ből?

Ha nincs olyan javascript, amelyiknek a háttérképek felsorolása helyett a könyvtár relatív útvonalát lehet megadni, akkor még megoldom valahogy, hogy a képek mappáiban mindenhol ugyanannyi és azonos nevű fájl legyen, így mehetnek a szkriptbe a fájlnevek. Segítséget ahhoz kérek, hogy a szkriptet tehetem-e külön fájlba, úgy, mint a CSS-t, és hogy pontosan milyen kódokkal válthatom ki a CSS BODY beállításait HTML-ben?

Köszönöm.
7

javascriptes random bg

griphons · 2008. Jan. 4. (P), 11.02
Amit találtál kód, az nagyszerűen alkalmazható, csak ne magát a bodyt állítasd elő vele, hanem a css kódot.
Persze a háttérképek relatív url-jeit meg kell adni a scriptnek, ő nem fogja tudni kibányászni egy adott mappából (én legalábbis nemtom, hogy azt js-tel meg lehet-e oldani)
Ilyen legyen a kódod:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">      
  2. <HTML lang="hu-HU">      
  3. <HEAD>      
  4. <TITLE>Demo DVD Project</TITLE>      
  5. <META content="hu-HU" name=content-language>      
  6. <META http-equiv="Content-type" content="text/html; charset=iso-8859-2">      
  7. <LINK href="stilus.css" rel=stylesheet type="text/css">      
  8. <LINK rel="shortcut icon" href="icon.ico">      
  9. <script>  
  10.   var randombgs=["../clip/backgr4.jpg", "../clip/backgr17.jpg", "../clip/backgr13.jpg"];  
  11.   document.write('<STYLE>body.demodvd {');  
  12.   document.write('background: rgb(250,250,150) ');  
  13.   document.write('url('+randombgs[Math.floor(Math.random()*randombgs.length)]+'") ');  
  14.   document.write('scroll top left no-repeat;');  
  15.   document.write('}</STYLE>');  
  16. </script>  
  17. </HEAD>      
  18. <BODY class=demodvd>   
A stilus.css-be a többi formázás mehet. Ez egyébként nagyon hasonló arra, amit razielanarki írt.
8

End: Véletlenszerű háttérkép

Moon · 2008. Jan. 8. (K), 04.35
A lemezek elkészültek, köszönöm a segítséget!

A végleges kód ilyen lett, a \' kellett még, hogy jó legyen:
  1. <SCRIPT>  
  2.   var randombgs=["kep/bg001.jpg", "kep/bg002.jpg", "kep/bg024.jpg"];  
  3.   document.write('<STYLE>BODY.demodvd {BACKGROUND: rgb(250,250,150) ');  
  4.   document.write('url(\''+randombgs[Math.floor(Math.random()*randombgs.length)]+'\') scroll top left no-repeat}</STYLE>');  
  5. </SCRIPT>