Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JS Rotator banerów
Forum PHP.pl > Forum > Po stronie przeglądarki
ShadowD
Witam piszę w JQuery rotato banerów i chciał bym wiedzieć jak można zrobić płynne przejście między jedną a drugą grafiką, może macie jakieś pomysły?
erix
Rodzic: position: relative, każdy z bannerów: position: absolute; top: 0; left: 0.

Potem wszystkie ukrywasz prócz pierwszego, następnie pokazujesz N+1, a bieżący chowasz.
ShadowD
A w jquery jest jakaś funkcja która zatrzyma skrypt na dany okres czasu, czy trzeba używać js'owej?
erix
Po co mieliby w jQuery tworzyć osobną, skoro masz magiczną funkcję setInterval, a jak chyba wiesz, w jQ i ogólnie w JS wszystko jest obiektem/funkcją. ;]

Jeśli jest setInterval, to jest i clearInterval. winksmiley.jpg AFAIK tylko Prototype ma PeriodicalExecutor.
ShadowD
Mam jeszcze jedno pytanie, za pomocą $('#baner').find('a.b0').css('top') pobieram rozmiar i wygląda on tak - "60px" jak usunąć z dopisek "px"?
erix
parseInt ;]
ShadowD
Wielkie dzięki. ;}

W jaki sposób można sprawdzić wymiary obrazka, próbowałem css('width') i attr('width') ale wynik zawsze jest równy null, ma ktoś jakiś pomysł?
erix
Nie via css, a attr. dry.gif
ShadowD
Przeczytaj uważnie jeszcze raz mojego posta. winksmiley.jpg

Mam taki kod:

  1. alert($(idBaneru).find('a.b1').find('img').height())
  2.  
  3. <div id="baner">
  4. <a href="http://www.onet.pl" name=odnosnik>
  5. <img width="1000px" alt="Baner" src="banertop.jpg">
  6. </a>
  7. <a href="http://www.o2.pl" name=odnosnik>
  8. <img width="1000px" alt="Baner" src="banertop2.jpg">
  9. </a>
  10. <a href="http://www.o2.pl" name=odnosnik>
  11. <img width="1000px" alt="Baner" src="banertop3.jpg">
  12. </a>
  13. </div>


Attr('height') daje w tym przypadku to samo co powywszy kod czyli NULL, jak zamieniam na:

  1. alert($(idBaneru).find('img').height())


Działa poprawnie, ale jestem ciekawy którego z banerów pobrałem dane? haha.gif

Edit:

Przed wszystkim oczywiście mam jeszcze:

  1. $(idBaneru).find("a").each(function(i)
  2. {
  3. var top=(wysokoscBaneru+odstepBaneru)*i
  4. $(this).addClass('b'+i).css('top',top+'px')
  5. })


Edit2:
Już wiem - zła kolejność haha.gif

Edit3:

A więc mój pomysł na sprawienie sobie rotatora trochę nie wypalił, najpierw pokażę kod:

Js:
  1. //Urzywaj wyłącznie liczb naturalnych, parzystych i z oznaczonego zbioru!
  2. //Czas w jakim baner stoi (x-x)
  3. var czasPrzestoju=1000
  4. //Czas trwania animacji - jeden cykl (10-x)
  5. var czasAnimacji=10
  6. //Ilość pixeli przemieszczonych w ciągu jednego cyklu (1-2)
  7. var iloscPixeli=1
  8. //Wysokosc banera (x-x)
  9. var wysokoscBaneru=50
  10. //Odstep pomiegdzy banerami (x-x)
  11. var odstepBaneru=6
  12. //Przyśpieszenie animacji gdy zostaje wyzerowana (1-2)
  13. var przyspieszenieAnimacji=1
  14.  
  15. $(document).ready(function()
  16. {
  17. baner('#baner')
  18. baner('#baner2')
  19. baner('#baner3')
  20. });
  21.  
  22. function baner(idBaneru)
  23. {
  24. wysokoscBaneruP=wysokoscBaneru/iloscPixeli
  25. odstepBaneruP=odstepBaneru/iloscPixeli
  26.  
  27. $(idBaneru).find("a").each(function(i)
  28. {
  29. var top=(wysokoscBaneru+odstepBaneru)*i
  30. $(this).addClass('b'+i).css('top',top+'px')
  31. })
  32.  
  33. cukl(idBaneru,0);
  34. }
  35.  
  36. function cukl(idBaneru,cykl)
  37. {
  38. cykl++
  39.  
  40. for(i=0;$(idBaneru).find('a.b'+i).css('top')!=undefined;i++)
  41. var ilosc=i+1
  42.  
  43. if(ilosc>1)
  44. {
  45. if(cykl<ilosc)
  46. {
  47. setTimeout('przesuniecieUp("'+idBaneru+'",0,'+cykl+')',czasPrzestoju)
  48. }
  49. else
  50. {
  51. ilosc=ilosc*2-1
  52.  
  53. if(cykl<ilosc)
  54. {
  55. setTimeout('przesuniecieDown("'+idBaneru+'",0,'+cykl+')',czasPrzestoju)
  56. }
  57. }
  58. }
  59. }
  60.  
  61. function przesuniecieUp(idBaneru,przesuniecie,cykl)
  62. {
  63. for(i=0;$(idBaneru).find('a.b'+i).css('top')!=undefined;i++)
  64. {
  65. top=parseInt($(idBaneru).find('a.b'+i).css('top'))
  66. top=top-iloscPixeli
  67. $(idBaneru).find('a.b'+i).css('top',top+'px')
  68. }
  69.  
  70. przesuniecie++
  71.  
  72. if(przesuniecie<wysokoscBaneruP+odstepBaneruP)
  73. setTimeout('przesuniecieUp("'+idBaneru+'",'+przesuniecie+','+cykl+')', czasAnimacji)
  74. else
  75. cukl(idBaneru,cykl)
  76. }
  77.  
  78. function przesuniecieDown(idBaneru,przesuniecie,cykl)
  79. {
  80. for(i=0;$(idBaneru).find('a.b'+i).css('top')!=undefined;i++)
  81. var ilosc=i
  82.  
  83. for(i=0;$(idBaneru).find('a.b'+i).css('top')!=undefined;i++)
  84. {
  85. top=parseInt($(idBaneru).find('a.b'+i).css('top'))
  86. top=top+iloscPixeli*ilosc*przyspieszenieAnimacji
  87. $(idBaneru).find('a.b'+i).css('top',top+'px')
  88. }
  89.  
  90. przesuniecie++
  91.  
  92. if(przesuniecie<(wysokoscBaneruP+odstepBaneruP)/przyspieszenieAnimacji)
  93. setTimeout('przesuniecieDown("'+idBaneru+'",'+przesuniecie+','+cykl+')', czasAnimacji)
  94. else
  95. cukl(idBaneru,0)
  96. }


Css:
  1. *
  2. {
  3. margin:0px;
  4. padding:0px;
  5. border-width:0px;
  6. }
  7.  
  8. #body
  9. {
  10. margin:100px auto;
  11. width:990px;
  12. }
  13.  
  14. .baner
  15. {
  16. width:1000px;
  17. height:50px;
  18. overflow: hidden;
  19. position: relative;
  20. }
  21.  
  22. .baner a
  23. {
  24. display:block;
  25. position: absolute;
  26. }


Html:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  4. <meta name="generator" content="PSPad editor, www.pspad.com">
  5. <title>Rotator</title>
  6. <link href="style.css" type="text/css" rel="stylesheet">
  7. <script src="http://www.a.cmsss.pl/admin/js/1=jquery.js" type="text/javascript"></script>
  8. <script src="sys.js" type="text/javascript"></script>
  9. </head>
  10. <body>
  11.  
  12. <div id="body">
  13.  
  14. <div id="baner" class="baner">
  15. <a href="http://www.onet.pl" name=odnosnik>
  16. <img width="1000px" alt="Baner" src="banertop.jpg">
  17. </a>
  18. <a href="http://www.o2.pl" name=odnosnik>
  19. <img width="1000px" alt="Baner" src="banertop2.jpg">
  20. </a>
  21. <a href="http://www.o2.pl" name=odnosnik>
  22. <img width="1000px" alt="Baner" src="banertop3.jpg">
  23. </a>
  24. </div>
  25.  
  26.  
  27. </div>
  28.  
  29. </body>
  30. </html>


I mam do tego dwa pytania:
1. Dlaczego dziadziała pod innymi przeglądarkami niż FF?
2. Wiem, że przy większej ilości banerów skrypt zakatuję przeglądarkę więc prosił bym o jakieś naprowadzenie jak powinno to wyglądać?
erix
  1. mam przeczucie, że wymyślasz koło na nowo; podejrzewam, że większość Twoich problemów rozwiąże animate
  2. wrzuć gdzieś działający kod
  3. poza tym, czemu rozbijasz selektory, skoro możesz używać w jQ np. banery('#selektor, #selektor2'), jeśli nieco podrasujesz kod
Ale wrzuć gdzieś to najpierw, potem będziemy gdybać.
ShadowD
Kilka przykładów:

http://www.baner.cmsss.pl/

Ale coś mi się zdaje, że oprócz wiedzy o jquery to nic z tego nie będzie wszystko się wiesza w większych ilościach. haha.gif

*Wydaje mi się że sam pomysł pisania animacji w taki sposób jest żałosny...
erix
Cytat
*Wydaje mi się że sam pomysł pisania animacji w taki sposób jest żałosny...

Zdziwiłbyś się. ;p Gdyby był żałosny, nie powstawałyby moduły animacyjne, czy chociażby Ming. ;]

A jeśli chodzi o wydajność: czemu się dziwić, jak za każdym razem wyszukujesz uchwyt do warstwy zamiast go przechowywać w zmiennej pomocniczej?
ShadowD
OO, tak się da. haha.gif

Jestem mocno początkujący w sprawach js, na pewno to poprawię, a może widzisz tu jeszcze inne poważne błędy i czy zmiana tego znacząco wpłynie na wydajność?
erix
Cytat
i czy zmiana tego znacząco wpłynie na wydajność?

Jesteś gazeciarzem i codziennie roznosisz papiery tylko do kilku wybranych domów. Co będzie szybsze? Jeśli za każdym razem będziesz pytał sąsiadów, gdzie mieszkają delikwenci, czy gdy sobie zapiszesz ich adresy na kartce? snitch.gif
ShadowD
Kod poprawiłem i zaktualizowałem, jednak że nadal widać znaczne opóźnienia przy kilku identycznych banerach - kończą pracę w różnym czasie, a co jest jeszcze gorsze gdy jakiś z banerów skończy się przesuwać reszta znacznie przyśpiesza.

Tak myślę że może jest to mój zmysłowy błąd, w moim rozumieniu miały się ruszać załóżmy cztery banery i każdy miał mieć swój kontroler, w tym przypadku miało być cztery wątki między którymi nie miało być żadnego kontaktu. A wydaje mi się, że jak wydawane jest polecenie zatrzymania na x sekund to zatrzymują się wszystkie funkcje, czy aby nie?
erix
To i tak nie ma znaczenia...

A tak w ogóle, to bym przepisał wszystko od nowa - na co tam tyle pętli?
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.