Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][jQuery] Problem z .hover po kliknięcu
emilgojny
post 21.07.2011, 08:19:48
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


Witam wszystkich,

Mam problem z funkcją .hover odpowiedzialną za animowanie przycisku na stonie. Załącze najpierw kod jQuery:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. $('.button').hover(function(){
  4. setTimeout(function(){$('.button').css('backgroundPosition','-'+160+'px -'+0+'px');}, 40);
  5. setTimeout(function(){$('.button').css('backgroundPosition','-'+320+'px -'+0+'px');}, 80);
  6. setTimeout(function(){$('.button').css('backgroundPosition','-'+480+'px -'+0+'px');}, 120);
  7. setTimeout(function(){$('.button').css('backgroundPosition','-'+640+'px -'+0+'px');}, 160);
  8. },
  9. function(){
  10. setTimeout(function(){$('.button').css('backgroundPosition','-'+640+'px -'+0+'px');}, 40);
  11. setTimeout(function(){$('.button').css('backgroundPosition','-'+480+'px -'+0+'px');}, 80);
  12. setTimeout(function(){$('.button').css('backgroundPosition','-'+320+'px -'+0+'px');}, 120);
  13. setTimeout(function(){$('.button').css('backgroundPosition','-'+160+'px -'+0+'px');}, 160);
  14. setTimeout(function(){$('.button').css('backgroundPosition','-'+0+'px -'+0+'px');}, 200);
  15. });
[JAVASCRIPT] pobierz, plaintext


Jak widać, funkcja w prosty sposób animuje przycisk podczas .mouseenter a podczas .mouseleave wykonuje tę samą animację od końca (przycisk sie rozsuwa i zsuwa). Wszystko działa poprawnie dopuki nie kliknę na przycisk. Po kliknięciu zmienia się strona (przycisk zostaje w tym samym miejscu i ma te same właściwości) lecz przycisk bez animacji wraca do stanu spoczynku, a kiedy z niego "zjadę" włącza się animacja z .mouseleave (która jest tak jakby urwana bo powinna następować dopiero po zaanimowaniu .mouseenter). Chciałbym, żeby po kliknięciu przycisk nie wracał do stanu spoczynku tylko zostawał rozsunięty. Na wszelki wypadek załaczam także fragment html i css.

  1. <a href="index.html"><div class="button">O nas</div></a>


  1. .button {
  2. float: left;
  3. overflow: hidden;
  4. background: transparent url("../grafika/animacja.png") no-repeat;
  5. width: 125px;
  6. height: 34px;
  7. }


Z góry dzieki za pomoc!
Pozdrawiam

emilg
Powód edycji: [thek]: Na przyszłość używaj własciwego bbcode!
Go to the top of the page
+Quote Post
askone
post 21.07.2011, 08:34:37
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Skoro korzystasz z jquery to czemu animację wykonujesz poprzez SetTimeout a nie jquery.animate?

Pozdrawiam


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
emilgojny
post 21.07.2011, 08:54:43
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


Nie używam .animate bo nie jestem jakims fachowcem jezeli chodzi o jQuery i JS, zadużo bym sie musiał namęczyć żeby otrzymać zamierzony efekt. Mam po prostu 5 klatek animacji w spricie i wyświetlam je po kolei wink.gif Sam efekt animacji jest dla mnie bez zarzutów. Problem mam tylko z tym co sie dzieje po kliknięciu. Nie wydaje mi się żeby .animate to rozwiązał.

Dzięki za jakikolwiek odzew wink.gif lecz czekam na dalsze odpowiedzi wink.gif
Go to the top of the page
+Quote Post
askone
post 21.07.2011, 09:10:11
Post #4





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Masz to dostępne gdzieś online?


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
emilgojny
post 21.07.2011, 09:37:56
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


Dzieki za chęć pomocy.

Wrzuciłem na republikę. Link

Proszę się nie sugerować wyglądem ani treścią. Postanowiłem na początku zająć się techniczną częścią strony a treść i grafikę zrobić na końcu. Pokopiowałem więc losowe treści z wikipedii i zrobiłem w 5 minut byle jakie grafiki w gimpie, żebym tylko miał na czym pracować wink.gif

Pozdrawiam!
Go to the top of the page
+Quote Post
askone
post 21.07.2011, 09:52:49
Post #6





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Istnieją 2 rozwiązania Twego problemu:

1. W skrypcie php wykrywasz, który element menu ma być aktywnym i dodajesz do niego odpowiednią definicję pozycji background w atrybucie style
2. Zapisujesz każdy krok animacji jako osobną klasę w pliku css. Wtedy w poszczególnych klatkach animacji nie modyfikujesz background-position tylko nadajesz odpowiednia klasę. Ponadto klasa, która będzie miała background-position: -640px, 0 przypisujesz do aktywnego elementu menu.

Mam nadzieję, iż nie namieszałem - jak będziesz miał problem ze zrozumieniem idei to postaram się wrzucić jakiś kod

Pozdrawiam


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
emilgojny
post 21.07.2011, 10:05:05
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


Sposób nr 1 odpada bo nie mam zielonego pojęcia na temat php i nie chciałbym wsadzać na stronę czegoś czego nie rozumiem. Poza tym wolałbym utrzymac całość w konwencji html/css/js.

Sposób numer dwa jest dla mnie zrozumiały tylko pojawiają się dwa pytania.
Czy to nie obciąży zbyt strony? Kod na każdy przycisk wydłuży mi się o ładne kilka linijek.
Poza tym, linkiem w moim przypadku jest cały div. Co po kliknięciu na niego dostaje klasę active? Próbowałem różnych kombinacji w arkuszu aby to sprawdzić i nie udało mi się nic dowiedzieć. Jeśli wiedziałbym co dostaje klasę active, mógłbym z poziomu css dopisać, że elementy klasy active maja background-position: -640px

Dzieki i pozdrawiam!

emilg

Ten post edytował emilgojny 21.07.2011, 10:05:37
Go to the top of the page
+Quote Post
askone
post 21.07.2011, 10:46:39
Post #8





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Skoro nie używasz php to rozumiem, iż posiadasz osobne pliki html do każdego elementu menu. Jeśli tak to wystarczy wpisać na stałe w kod html pozycji background. Przykładowo dla strony oferta.html
  1. <a href="oferta.html">
  2. <div class="b" style="background-position: -640px 0px; ">
  3. Oferta
  4. </div>
  5. </a>


Pozdrawiam

Ten post edytował askone 21.07.2011, 10:47:02


--------------------
Kliknij jeśli moja odpowiedź Ci pomogła.
askone.pl
Go to the top of the page
+Quote Post
emilgojny
post 21.07.2011, 11:31:34
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


No rzeczywiście, to chyba najprostsze rozwiązanie wink.gif co prawda po późniejszym kliknięciu na inny link tamten wraca do stanu spoczynku bez animacji ale nie będzie to aż tak zauważalne.

Dzieki i pozdrawiam
Go to the top of the page
+Quote Post
erix
post 21.07.2011, 12:32:21
Post #10





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




Ale to rozwiązanie jest niesemantyczne. Po co mieszać styl z HTML w tym przypadku? Jedyny sens, to gdyby było ustalane przez użyszkodnika tło.

Dużo lepszym rozwiązaniem jest tu użycie data:

  1. najeżdżasz -> ustawiasz atrybut dla elementu
  2. zjeżdżasz -> sprawdzasz, czy atrybut jest ustalony, jeśli jest -> animacja i czyścisz flagę. Jeśli nie jest - nie robisz nic


Bez kombinowania. [;


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

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
emilgojny
post 21.07.2011, 13:21:20
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.07.2011

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


A mógłbym prosić o jakiś dokładniejszy opis co zrobić z tym .data i gdzie to umieścić?

Dzieki i pozdrawiam

emilg
Go to the top of the page
+Quote Post
erix
post 21.07.2011, 19:42:37
Post #12





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




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

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: 18.07.2025 - 11:41