Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Efekt Losowania
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Velius
Witam,

Mam problem takiego rodzaju, że potrzebuję napisanego w javascripcie (bo tylko tak da się to zrobić) skryptu, który dynamicznie (tak żeby było widać że coś tam losuje) i w fajny sposób losowałby 1 element z dostępnych: de_dust2;de_inferno;de_train;de_nuke;de_cbble.

Najlepiej byłoby gdyby losowanie wyglądało w ten sposób:

-losowo czas przebiegu losowania (od 10 do 20 sekund)

-elementy szybko się zmieniają, a z czasem coraz wolniej aż w końcu ustanie i zostanie wybrany 1 element.

-ma być zrobione tak, żeby każdy element miał równe szanse na pojawienie się (wiadomo o co mi chodzi, o to żeby nie pojawialy sie caly czas 3 a te 2 pozostałe nigdy)




Szukałem już naprawdę wszędzie. Potrzebuję kogoś kto się na tym naprawdę zna. Potrafię to zrobić w php, ale dla niektórych może to być podejrzane (obstawione).

Potrzebuję tego skryptu na LAN Party, które odbędzie się w mojej szkole. Mapy, na których będą rozgrywane mecze muszą być losowane, ponieważ gramy tylko 1 mapę (za mało czasu). Rzutnikiem na ścianie pokażemy proces losowania, żeby nikt nie powiedział, że było to już z góry obstawione przez organizatorów (drużyna organizatorów też bierze udział).

Dziękuję za każdą pomoc. Jest to dla mnie bardzo ważne.

erix
Math.random() + setInterval?
Velius
Możesz mi powiedzieć jak zapisać te elementy, które wcześniej podałem w Math.random()? Znalazłem przykład z zakresem liczb ale z tekstem nie:/

erix
http://tinyurl.com/nd4fl3
flashdev
Kod
<input type="text" />
<script>
var str = "de_dust2;de_inferno;de_train;de_nuke;de_cbble";
var tab = str.split(";");

function run(time, n){
    document.getElementsByTagName("input")[0].value = tab[n];
    if( time < 500 ){
        setTimeout(run, time, time+5, (n+1)%tab.length);
    }else{
        alert("koniec;)");
    }
}
run(0, Math.round(Math.random()*tab.length));
</script>
Velius
Zrobiłem to tak:

  1. <script type="text/javascript">
  2. function changeStatusBarText()
  3. {
  4. var r_text = new Array ();
  5. r_text[0] = "de_dust2";
  6. r_text[1] = "de_inferno";
  7. r_text[2] = "de_nuke";
  8. r_text[3] = "de_cbble";
  9. r_text[4] = "de_train";
  10. var i = Math.floor(5*Math.random())
  11.  
  12. document.write(r_text[i]);
  13. }
  14. setInterval("changeStatusBarText();", 1000);
  15. </script>


Co źle?

-wszystko pokazuje się na białej stronie, a szablon znika

-muszę odświeżać stronę, bo coś nie działa...

@flashdev: super, działa. Ale mam prośbę. Nie będzie nic widać na rzutniku. Nie dałoby się większego tego zrobić? W inpucie to chyba nie przejdzie:/
flashdev
Cytat(Velius @ 15.09.2009, 18:32:43 ) *
Co źle?

-wszystko pokazuje się na białej stronie, a szablon znika

-muszę odświeżać stronę, bo coś nie działa...


Cytat
document.write(r_text[i]);


zobacz -> innerHTML

document.write nadpisuje Ci cały dokument.

Cytat(Velius @ 15.09.2009, 18:32:43 ) *
@flashdev: super, działa. Ale mam prośbę. Nie będzie nic widać na rzutniku. Nie dałoby się większego tego zrobić? W inpucie to chyba nie przejdzie:/


1. CSS
2. DIV + innerHTML
Velius
Myślałem, że to już koniec moich problemów. A tu nagle pod IE:

undefined

a losowanie nie działa.


Da się coś na to poradzić? W szkole są tylko IE:/

flashdev
Wygląda na to że setTimeout nie działa poprawnie (nie przekazuje parametrów do funkcji) w IE:
Rozwiazaniem będzie stworzenie zmiennych globalnych. Złym rozwiazaniem, no ale coż - to jest IE.
I wygląda na to że split też sie w IE sypie.
Przeklep zwyczajnie tablice (jak poniżej) to unikniesz użycia tej funkcji.
Kod
var tab = new Array(1, 2, 3, 4);


http://www.google.pl/search?client=opera&a...-8&oe=utf-8
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.