Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czasowe podświetlanie obrazków
moto0095
post 4.11.2010, 21:46:33
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Witam. Już od dobrej godziny szukam w Googlach i nic nie mogę znaleźć.
Mam na stronie 6 obrazków. I teraz chciałbym uzyskać następujący efekt:
Gdy gość kliknie na link "podświetl" to co sekundę podświetli się kolejny obrazek (podświetli: zmieni "border-color" na czerwony).
Trochę sam próbowałem (przy użyciu jQuery) i udało mi się coś takiego uzyskać, ale to podświetli tylko pierwszy obrazek:
  1. <script type="text/javascript">
  2. function str_repeat ( input, multiplier ) {
  3. return new Array(multiplier+1).join(input);
  4. }
  5.  
  6. $(document).ready(function () {
  7. var ile = 6;
  8.  
  9. $('a#ok').click(function pods() {
  10. for(i=0; i<ile; i++) {
  11. view(i);
  12. }
  13. });
  14.  
  15. function view(id) {
  16. $('div#mig img').removeClass('active');
  17. $('div#mig img#m'+id).addClass('active');
  18. setTimeOut('view('+id+')', 1000);
  19. }
  20.  
  21. });


Proszę o pomoc smile.gif
Go to the top of the page
+Quote Post
erix
post 4.11.2010, 21:50:08
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Argh, po co Ci do tego nazywanie każdego obrazka z osobna? Masz przecież metodę eq(), która zwraca obiekt o i-tym indeksie.

Puść to na żywo, trochę za mało informacji.

[JAVASCRIPT] pobierz, plaintext
  1. $('div#mig img').removeClass('active');
  2. $('div#mig img#m'+id).addClass('active');
  3. setTimeOut('view('+id+')', 1000);
[JAVASCRIPT] pobierz, plaintext

Z tego, co widzę, to tylko jedną rundkę zrobi i będzie szukać w nieskończoność. I aż prosi się o metodę eq.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
moto0095
post 4.11.2010, 22:50:51
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Spoko funkcja, ale poza nią co jeszcze trzeba dodać/zmienić questionmark.gif
Go to the top of the page
+Quote Post
erix
post 5.11.2010, 08:44:22
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przecież napisałem, czego nie rozumiesz?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
moto0095
post 5.11.2010, 20:11:30
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


No bo podałeś funkcję eq(); która pozwala pozwala na usunięcie id ale jak mam zrobić aby co sekundę "podświetlał" się kolejny obrazek questionmark.gif
Go to the top of the page
+Quote Post
f(x)
post 5.11.2010, 20:14:16
Post #6





Grupa: Zarejestrowani
Postów: 40
Pomógł: 1
Dołączył: 29.10.2010

Ostrzeżenie: (10%)
X----


Dodać 2 sec ?
Go to the top of the page
+Quote Post
zegarek84
post 5.11.2010, 21:48:00
Post #7





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


chociaż jestem już podchmielony, to jest szansa, że algorytm który chciałeś uzyskać mógłby zadziałąć - a jeśli nie to i tak wskażę najważniejszy błąd który tutaj nie ma prawa bytu ;] [wycinek Twojej funkcji - ale pełna funkcja gdyż chcę coś o zasięgu zmiennych napisać...]:
Kod
function () {
    var ile = 6;
        
         $('a#ok').click(function pods() {
              for(i=0; i<ile; i++) {
                      view(i);
              }
         });        
        
        function view(id) {
              $('div#mig img').removeClass('active');
              $('div#mig img#m'+id).addClass('active');
              setTimeOut('view('+id+')', 1000);
            }    
        
}
dalej w funkcji view która jest już niestety lub stety jeśli chodzi o "hermetyzację kodu" jest już funkcją prywatną nie dostępną z poziomu window... idąc dalej chcałeś zrobić rekurencje "setTimeOut('view('+id+')', 1000);".... ale eval jest zły ];-> - fakt może nie bezpośredni ale masz tam eval'a - a z eval'a dostęp do zmiennych masz z poziomu tylko window - jeśli wewnątrz funkcji poprzedzisz zmienną przez var lub funkcje zadeklarujesz wewnątrz funkcji to są "rzeczy" prywatne których nie ma w window... na szybjko na to obejście i teraz Ci nie wytłumacze gdyż o tym można by więcej napisać to przekazanie anonimowej funkcji:
setTimeOut(function(){view(id);}, 1000);

lub jeśli bedziesz ciekaw i poeksperymwntujesz to można jeszcze funkcje bez wywołania przekazywać do setTimeout lub metody obiektów [czyli funkcje] na zasadzie np.:
setTimeOut(view, 1000);
wiem - brakuje Ci parametru - poczytaj o zasięgu zmiennych to znajdziesz rozwiązanie...

ps tak dodatkowo - w js funkcje są obiektami, ale obiekty nie są funkcjami [dopiero ich metody dostępowe mogą być funkcjami] - wiem, może trochu teraz zakręciłem ale jak się zrozumie js i zasięg zmiennych to ten język staje się lekki i wygodny... a na potwierdzenie tego co napisałęm sprawdź sobie instancje obiektu i funkcji przez alert(X instanceof Object|Function); - pewniem literówkę walnał ;p - sorki ale pisz ę tylko hobbistycznie i za dużo tego dobrego "miodu" ;]


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 21:05