Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CSS][JavaScript] Problem z mini-psuedo-sliderem, setInterval i CSS
Twist
post 4.09.2011, 18:54:36
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


Hej, Uczę się JS'a i w celach edukacyjnych napisałem coś takiego:

  1. <script type="text/javascript">
  2. <!--
  3.  
  4. window.addEventListener("load",Laduj,false);
  5. var UchwycSlider;
  6. var stan = 1000;
  7. function Laduj()
  8. {
  9. var UchwytLewy = document.getElementById('aprev');
  10. UchwytLewy.addEventListener("mouseover",PrzewinWLewo,false);
  11. }
  12. function PrzewinWLewo()
  13. {
  14.  
  15. UchwycSlider = document.getElementById('sliderPhotoRow');
  16. stan=10;
  17. setInterval(Przesuniecie(),100);
  18. }
  19. function Przesuniecie()
  20. {
  21.  
  22.  
  23. UchwycSlider.style.left = (++stan +"px");
  24. stan=stan++;
  25.  
  26. }
  27.  
  28. -->
  29. </script


Problem jest takie, że Przesuniecie() wykonuje sie tylko raz i zmienia CSS: left:11px a chcialbym, zeby Przesuniecie() wykonywalo sie cyklicznie (czyli co 100ms zmieniala "left" na starawartosc+1px)
Prosze o pomoc

EDIT: Wiem, ze "stan" proboje zwiekszac w roznyhc miejsach, ale i tka zadne nie dziala tak, jak sie spodziewalem.

Ten post edytował Twist 4.09.2011, 18:56:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
kamil4u
post 4.09.2011, 19:12:12
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Źle wywołujesz: setInterval(Przesuniecie(),100);
Powinno być: setInterval(Przesuniecie,100);
https://developer.mozilla.org/pl/DOM/window.setInterval

Jeżeli nadal nie zadziała umieść HTML i daj przykład na żywo - np. tu: http://www.jsfiddle.net/

Dam Ci więcej wskazówek, jeżeli dasz cały kod smile.gif


--------------------
Go to the top of the page
+Quote Post
Twist
post 4.09.2011, 19:14:41
Post #3





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


Wielkie dzięki!
Chodziło o wywołanie funkcji, tak jak pisałeś. Teraz działa dokładnie tak jak chciałem!
Go to the top of the page
+Quote Post
kamil4u
post 4.09.2011, 19:20:30
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Nadal proponuje, żebyś umieścił cały kod(z HTML itd.) - może znajdę parę "niedociągnięć", które warto, żebyś zapamiętał.


--------------------
Go to the top of the page
+Quote Post
Twist
post 4.09.2011, 20:15:22
Post #5





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


Generalnie - dopiero sie uczę i próbuje stworzyć coś a kształt slidera - jak tylko go skoncze - wstawie tutaj kod bądź link do kodu i posłucham opinii bardziej doświadczonych chłopaków smile.gif

Wersja ALPHA:
http://starodaj.securityhost.pl/slider/
  1.  
  2. <script type="text/javascript">
  3. <!--
  4.  
  5. window.addEventListener("load",Laduj,false);
  6. var UchwycSlider;
  7. var stan = 1;
  8. var stanRight = 1000;
  9. var stop ="nie";
  10. function Laduj()
  11. {
  12. var UchwytLewy = document.getElementById('aprev');
  13. var UchwytPrawy = document.getElementById('anext');
  14. UchwytLewy.addEventListener("mouseover",PrzewinWLewo,false);
  15. UchwytLewy.addEventListener("mouseout",Stop,false);
  16.  
  17.  
  18. UchwytPrawy.addEventListener("mouseover",PrzewinWPrawo,false);
  19. UchwytPrawy.addEventListener("mouseout",Stop1,false);
  20.  
  21. }
  22. function PrzewinWLewo()
  23. {
  24. stop="nie";
  25. UchwycSlider = document.getElementById('sliderPhotoRow');
  26.  
  27. setInterval(Przesuniecie,20);
  28.  
  29. }
  30. function Stop()
  31. {
  32. stop="tak";
  33. }
  34. function Stop1()
  35. {
  36. stop1="tak";
  37. }
  38.  
  39. function Przesuniecie()
  40. {
  41. if (stop == "nie")
  42. {
  43. UchwycSlider.style.left = (stan-- +"px");
  44. }
  45. }
  46. function PrzewinWPrawo()
  47. {
  48. stop1="nie";
  49. UchwycSlider = document.getElementById('sliderPhotoRow');
  50. setInterval(PrzesunieciePrawe,20);
  51. }
  52. function PrzesunieciePrawe()
  53. {
  54.  
  55. if (stop1 == "nie"){
  56. UchwycSlider.style.left = (++stan +"px");
  57.  
  58.  
  59. }
  60. }
  61.  
  62. -->
  63. </script


Niepożadany efekt - jak najedziemy kilkakrotnie na czerwona strzalke to przewija sie 2x szybciej i tak w kółko... Jak sie tego pozbyc?
Go to the top of the page
+Quote Post
kamil4u
post 4.09.2011, 20:35:19
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


1. Zamiast zmiennych tak,nie używaj true(tak)/false(nie)
2. Zrób jedną funkcję do przesuwania i jedną do zatrzymywania - a nie wszystko osobno
3. Zauważ, że większość kodu Ci się powtarza - warto tworzyć funkcje z argumentem, które znacznie skrócą kod.
4. Poczytaj o clearInterval


--------------------
Go to the top of the page
+Quote Post
Twist
post 4.09.2011, 20:43:20
Post #7





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


Dzięki za rady, pierwsze 3 wydaja sie jasne i zrozumiałem.
Co do 4 - jak poznać ID, ktore mam podac w clearInterval?
Go to the top of the page
+Quote Post
kamil4u
post 4.09.2011, 20:50:28
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Zrób to trochę inaczej:
Kod
mouseover -> test = setInterval(....);
mouseout -> clearInterval( test );

i wtedy bez zmiennej "stop".

lub

Kod
mouseover -> stop = false; test = setInterval( funkcja );
funkcja -> if( stop ) clearInterval( test ); else ....
mouseout ->stop = true;



--------------------
Go to the top of the page
+Quote Post
Twist
post 4.09.2011, 21:03:45
Post #9





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


troche mi wstyd pytać, ale co oznacza ta strzałeczka?
Go to the top of the page
+Quote Post
kamil4u
post 4.09.2011, 21:44:40
Post #10





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Nic nie oznacza - to miał być skrót myślowy smile.gif

np.
Kod
UchwytLewy.addEventListener("mouseover",PrzewinWLewo,false);

=
Kod
mouseover -> to co powinno znaleźć się w funkcji PrzewinWLewo


Ten post edytował kamil4u 4.09.2011, 21:45:02


--------------------
Go to the top of the page
+Quote Post
Twist
post 4.09.2011, 21:48:07
Post #11





Grupa: Zarejestrowani
Postów: 174
Pomógł: 11
Dołączył: 12.10.2008
Skąd: Dublin

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


Tak też myślałem, ale wolałem się upewnić. Wychodzę z założenia "nie jest wstydem pytać, wstyd to nie wiedzieć".
Jutro przerobię skrypt wg. wskazówek i wstawię tutaj
Dzięki jeszcze raz
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: 27.06.2025 - 04:37