Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery]Poruszanie divem
murrey
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2012

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


Witam mam następujący problem, chcę aby div poruszał się po oknie przeglądarki do miejsca klikniętego przez użytkownika. To potrafię zrobić ale mam problem z tym, że im odległość jest większa od aktualnej pozycji diva tym porusza się on szybciej, a ja chciałbym aby poruszał się ze stałą prędkością za każdym razem. W googlach ostatnio znalazłem rozwiązanie tego problemu ale nie zachowałem linka :/

Mam coś takiego:

  1. $(document).ready(function() {
  2. $('#viewport').bind('click', function(event) {
  3. $('#d').animate({
  4. left:event.pageX,
  5. top:event.pageY
  6. }, 2000, 'linear');
  7. }
  8. });
  9. });


Ten post edytował murrey 22.01.2014, 21:49:38
Go to the top of the page
+Quote Post
vonski
post
Post #2





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Jeżeli chcesz żeby div zawsze poruszał się z tą samą prędkością to czas trwania ruchu nie może być stały. Musisz uzależnić czas od drogi jaką ma do przebycia element. Dlatego też musisz jakoś tę drogę wyliczyć, najlepiej chyba na podstawie współrzędnych - aktualnych (przed rozpoczęciem ruchu) i docelowych (po zakończeniu animacji). Odejmujesz od siebie współrzędne, odpowiednio |x2 - x1| i |y2 - y1|. Musisz pamiętać żeby wyznaczyć wartość bezwzględną, bo możesz dostać ujemne wyniki. Jak to zrobisz, to dostaniesz w pewnym sensie długości boków trójkąta, którego przeciwprostokątna to szukana droga. Mam nadzieje, że wiesz jak się liczy długość przeciwprostokątnej, mając dane a i b wink.gif
A jak już wyliczysz drogę, to możesz ją po prostu podstawić do .animate() zamiast tego '2000'. Z tym że jeśli to zrobisz to animacja będzie bardzo szybka więc będziesz musiał dostosować tą prędkość do swoich potrzeb, np. przemnożyć drogę przez 5 i dopiero wtedy podstawić wynik do .animate().

To jedyne co mi przychodzi do głowy o tej porze wink.gif


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
murrey
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2012

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


Z trójkąta pitagorasa to bez problemu wyliczę drogę i podstawię wink.gif
Myślałem że jest inny sposób, w tamtym przykładzie który znalazłem wtedy użyta była funkcja setTimeout() tylko za cholerę nie mogę tego znaleźć
Go to the top of the page
+Quote Post
vonski
post
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Może ta biblioteczka Ci pomoże:
https://github.com/lukeshumard/supremation

Cytat
The usage for supremate is almost exactly the same as jQuery's .animate method, except for that duration has been replaced with speed. Speed is defined in units of pixels / second.


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
murrey
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.06.2012

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


Co prawda nie chciałem angażować już więcej bibliotek ale to jest to o co mi chodziło. Poczekam jeszcze może ktoś przedstawi inne rozwiązanie jeśli nie użyję tego. Dzięki wink.gif
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 Aktualny czas: 20.08.2025 - 10:21