Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> JS Rotator banerów
ShadowD
post
Post #1





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
erix
post
Post #2





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




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.
Go to the top of the page
+Quote Post
ShadowD
post
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


A w jquery jest jakaś funkcja która zatrzyma skrypt na dany okres czasu, czy trzeba używać js'owej?
Go to the top of the page
+Quote Post
erix
post
Post #4





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




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. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) AFAIK tylko Prototype ma PeriodicalExecutor.
Go to the top of the page
+Quote Post
ShadowD
post
Post #5





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


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"?
Go to the top of the page
+Quote Post
erix
post
Post #6





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




parseInt ;]
Go to the top of the page
+Quote Post
ShadowD
post
Post #7





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


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ł?

Ten post edytował ShadowD 6.06.2009, 21:55:57
Go to the top of the page
+Quote Post
erix
post
Post #8





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




Nie via css, a attr. (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
ShadowD
post
Post #9





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Przeczytaj uważnie jeszcze raz mojego posta. (IMG:http://forum.php.pl/style_emoticons/default/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? (IMG:http://forum.php.pl/style_emoticons/default/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ść (IMG:http://forum.php.pl/style_emoticons/default/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ć?

Ten post edytował ShadowD 7.06.2009, 00:01:35
Go to the top of the page
+Quote Post
erix
post
Post #10





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




  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ć.
Go to the top of the page
+Quote Post
ShadowD
post
Post #11





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


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. (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)

*Wydaje mi się że sam pomysł pisania animacji w taki sposób jest żałosny...
Go to the top of the page
+Quote Post
erix
post
Post #12





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




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?
Go to the top of the page
+Quote Post
ShadowD
post
Post #13





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


OO, tak się da. (IMG:http://forum.php.pl/style_emoticons/default/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ść?
Go to the top of the page
+Quote Post
erix
post
Post #14





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




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? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
ShadowD
post
Post #15





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


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?
Go to the top of the page
+Quote Post
erix
post
Post #16





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




To i tak nie ma znaczenia...

A tak w ogóle, to bym przepisał wszystko od nowa - na co tam tyle pętli?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 17:50