Autor | Zpráva | ||
---|---|---|---|
siklka Profil |
#1 · Zasláno: 8. 4. 2012, 19:00:52
Zdravím,
jsem začátečník co se týče scriptů. Mám script na náhodné zobrazování 4 bannerů. Problém je, že se zobrazí jeden banner klidně 4x místo jednou a zbylé 3 jiné. Můžete mi prosím poradit, jak mám upravit script, aby se jeden banner zobrazil jen 1 a né více krát? děkuji <SCRIPT Language="JavaScript"> <!-- Pics = new Array(0); new Array(1); new Array(2); new Array(3); new Array(4);new Array(5); new Array(6);new Array(7); ... Pics[0] = '<A HREF="http://odkaz" target="_blank" >'+ '<IMG SRC="http://adresa banneru" ALT="první banner" Border=0></A>'; Pics[1] = '<A HREF="http://odkaz" target="_blank" >'+ '<IMG SRC="http://adresa banneru" ALT="drůhý banner" Border=0></A>'; ..... // --> </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> <!-- document.write("<right>"); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write("<BR><SMALL>Náhodný banner</SMALL><BR>"); document.write("</right>"); // --> </SCRIPT> |
||
Sir Tom Profil |
#2 · Zasláno: 9. 4. 2012, 09:47:14
siklka:
Také zdravím, nejdříve - chybně deklaruješ pole - správně je: var Pics = new Array(); poté do tohoto pole vkládej odkazy <A> takto (uvozovky na konci a na začátku, uvozovky uprostřed jsou napsány jako \"): Pics[0] = "<A HREF=\"http://odkaz\" target=\"_blank\" ><IMG SRC=\"http://adresa banneru\" ALT=\"první banner\" Border=\"0\"></A>"; A poté z těchto 4 můžeš zobrazit jeden náhodný: <SCRIPT LANGUAGE="JavaScript"> <!-- document.write("<right>"); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write("<BR><SMALL>Náhodný banner</SMALL><BR>"); document.write("</right>"); // --> </SCRIPT> |
||
siklka Profil |
#3 · Zasláno: 9. 4. 2012, 10:56:20
jenže já chci zobrazit 4 náhodné z 20 bannerů, proto tam mám 4x
document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); document.write(Pics[Math.floor(Math.random() * Pics.length)]); ale problém je, že každý ( document.write(Pics[Math.floor(Math.random() * Pics.length)]);) si vybere podle svého a nekouká na to co vybral ten předtím, takže se pak klidně zobrazí 1 banner více krát a já nevím jak to ošetřit |
||
DarkMeni Profil |
#4 · Zasláno: 9. 4. 2012, 12:13:06
Z pole bannerů si buď vytvořit další pomocné pole, nebo ten vybraný banner odstranit po náhodném vybrání v základním poli, aby nemohl být vybrán 2x.
var pics = [ 'http://adresa.com/obrazek0.jpg', 'http://adresa.com/obrazek1.jpg', 'http://adresa.com/obrazek2.jpg', 'http://adresa.com/obrazek3.jpg', 'http://adresa.com/obrazek4.jpg', 'http://adresa.com/obrazek5.jpg', //... 'http://adresa.com/obrazek19.jpg' ]; function nahodne_bannery(pocet){ //S pomocným polem, který má být stejné jako základní, ale bude se z něj odstraňovat: var pomocne_pole = pics, html_vystup = ''; for(var pruchod = 0; pruchod < pocet; pruchod++){ var random_int = Math.floor(Math.random() * pomocne_pole['length']); html_vystup += '<a href="'+pomocne_pole[random_int]+'" target="_blank"><img src="'+pomocne_pole[random_int]+'" alt="banner"></a>'; delete pomocne_pole[random_int]; //Možná je na odstraňování prvků z pole jiná metoda, ale toto má myslim fungovat taky } document.getElementById('misto_pro_bannery').innerHTML = html_vystup; //Nebo místo zapisování do elementu, který musí existovat (jinak to háže chyby), s id "misto_pro_bannery" se to může zapsat rovnou do dokumentu na místo provádění skriptu metodou document.write, ale to při použítí časovačů (třeba pro dynamickou změnu) přepíše celý dokument. Pak je jediná možnost použít metody document.getElement(s)ById(Name nebo Class)... return true; //nebo místo toho vrátit html výstup jako výsledek funkce a pak s tím ještě něco třeba udělat: //return html_output; } nahodne_bannery(4); //nebo při vrácení html výstupu jako výsledku funkce: //document.write(nahodne_bannery(4)); |
||
siklka Profil |
#5 · Zasláno: 9. 4. 2012, 17:48:58
děkuji za snahu mi to vysvětlit, ale ztratila jsem se už na začátku po nadefinování adres obrázků
scripty se učí jako samouk po chvilkách, ale vidím, že mi to ještě nějakou chvíli dá než se do toho dostanu natolik, abych si něco vytvořila nebo aspoň poupravit ke svému |
||
Giga Profil * |
#6 · Zasláno: 9. 4. 2012, 18:52:57
siklka
Asi najskôr vyrieš algoritmus a až po tom rieš, ako to zapíšeš. Napr.: Pri načítaní poľa bannerov každému priradíš náhodné číslo. Pole zoradíš podľa tých náhodných čísiel. Potom už len postupne zobrazuješ štvorice po sebe nasledujúcich bannerov. |
||
DarkMeni Profil |
#7 · Zasláno: 9. 4. 2012, 19:40:35
siklka:
„nadefinování adres obrázků“ Potom je ten skript zabalenej do funkce, aby se mohl zavolat třeba víckrát (při časování - aby se ty banery třeba každou minutu měnily), ale taky to jde zjednodušit na jednorázové použití, kde by ten kód bral asi jen 5 řádků (+ další řádky s definicí adres k obrázkům). Na jakpsatweb.cz v sekci JavaScript o tom, co jsem napsal do ukázky, jak by to mohlo vypadat, něco bude (minimálně tam jsou popsané funkce a cykly (for). Jinak zápis pole['length'] pochopí javascript stejně jako pole.length, a delete proměnná (teď si nejsem jistý syntaxí - jestli delete(proměnná) nebo s mezerou: delete proměnná) odstraní tu proměnnou. Ale nejlepší asi bude, jak psal Giga, si vymyslet algorytmus s metodama, který znáš, a pak to podle něj zapsat, a až objevíš třeba efektivnější metodu, tak ten kód tak trochu přepsat. A ne vždicky má klient javascript zapnutý, takže jestli tam ty banery musí být, tak by nebylo špatný je dát do html (nebo php, podle toho v čem píšeš) zabalené v nějakém elementu s id, aby se pak daly přepsat na náhodné, jinak s tím document.write (nebo novější, lepší ale asi složitější přístup k elementům přes document.getElementById...), když bude mít klient vypnutý javascript nehne. |
||
Časová prodleva: 12 let
|
0