Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] jQuery - określona akcja działa po przewinięciu strony
bahh
post 24.12.2014, 10:50:50
Post #1





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


Witam wszystkich,

borykam się z pewnym problemem, otóż - mam funkcję, która ma się wykonać po przewinięciu strony. To znaczy, jeśli scroll będzie na wysokości 500 pikseli od samej góry strony, to uruchomi to (ważne, uruchomi to TYLKO RAZ!)

  1. jQuery({someValue: 0}).animate({someValue: 20}, {
  2. duration: 2000,
  3. easing:'swing',
  4. step: function() {
  5. $('#c1').text(Math.ceil(this.someValue));
  6. }
  7. });


w jaki sposób to zrobić? Korzystałem z $(window).scrollTop() jako if (tzn var scroll1 = $(window).scrollTop() i dalej if (scroll1>500) ale za każdym razem, gdy przewinąłem stronę i wróciłem w górę to animacja odpalała się ponownie - czego rzecz jasna nie chcę. Ma ktoś pomysł, jak zrobić to tak, by dana akcja uruchomiła się tylko jeden raz po przewinięciu strony do danej wartości?
Go to the top of the page
+Quote Post
Turson
post 24.12.2014, 10:53:19
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Zdefiniuj jakąś zmienną przykładowo
var animacja = true;
przed wykonaniem animacji sprawdz czy animacja == true, jesli tak to ją wykonaj i ustaw na false
Go to the top of the page
+Quote Post
bahh
post 24.12.2014, 11:08:03
Post #3





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


Niestety nie działa, mój kod:

  1. $(document).ready(function(){
  2. var scrolled = $(window).scrollTop();
  3. var animation1 = true;
  4. if (scrolled>100)
  5. {
  6. if (animation1 == true)
  7. {
  8. jQuery({someValue: 0}).animate({someValue: 20}, {
  9. duration: 2000,
  10. easing:'swing',
  11. step: function() {
  12. $('#c1').text(Math.ceil(this.someValue));
  13. }
  14. });
  15. animation1 = false;
  16. }
  17. }
  18. });


Ten post edytował bahh 24.12.2014, 11:08:21
Go to the top of the page
+Quote Post
viking
post 24.12.2014, 11:20:43
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Scrolled jest tu pobierane raz po załadowaniu. Ty potrzebujesz przypiąć zdarzenie $(window).on('scroll') i w nim sprawdzać pozycję.


--------------------
Go to the top of the page
+Quote Post
bahh
post 24.12.2014, 14:55:14
Post #5





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


gdy zmieniam
var scrolled = $(window).scrollTop();
na
var scrolled = $(window).on('scroll');

to nic to nie daje, jak to poprawnie wykonać?
Go to the top of the page
+Quote Post
viking
post 24.12.2014, 16:58:06
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


  1. $(function() {
  2. $(window).on('scroll', function(){
  3. var scrolled = $(this).scrollTop();
  4. ...
  5. });
  6. });
  7.  


--------------------
Go to the top of the page
+Quote Post
tzm
post 24.12.2014, 17:12:54
Post #7





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Cytat(viking @ 24.12.2014, 16:58:06 ) *
  1. $(function() {
  2. var oneTimeEvent = false;
  3. $(window).on('scroll', function(){
  4. var scrolled = $(this).scrollTop();
  5. If ( scrolled == 500 && oneTimeEvent == false){
  6. oneTimeEvent = true;
  7. //tutaj kod
  8. }
  9. ...
  10. });
  11. });
  12.  


Ten post edytował tzm 24.12.2014, 19:24:26
Go to the top of the page
+Quote Post
bahh
post 24.12.2014, 21:14:51
Post #8





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


niestety nie śmiga to, po prostu jQuery przestaje działać
Go to the top of the page
+Quote Post
Turson
post 24.12.2014, 21:20:34
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Sprawdź konsolę
Go to the top of the page
+Quote Post
bahh
post 24.12.2014, 21:34:17
Post #10





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


Panowie, nie znam się dobrze na jQuery smile.gif liczę na wyrozumiałość, zwłaszcza, że funkcje, które tutaj podajecie są dla mnie niezrozumiałe. Dodatkowo dla informacji wrzucam powyższy kod do $(document).ready(function(){ ... });

Go to the top of the page
+Quote Post
maviozo
post 24.12.2014, 23:12:42
Post #11





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

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


Liczysz na gotowca, a nie wyrozumiałość smile.gif
Zacząłbym od edycji tej linijki:
Kod
If ( scrolled == 500 && oneTimeEvent == false){

Ponieważ przewijasz stronę partiami, zapewne przeskakujesz wartość 500. Ustaw na "większe lub równe " wtedy zarówno 500, jak i 510 i 520 uruchomi zdarzenie.
Kod
If ( scrolled >= 500 && oneTimeEvent == false){

Poza tym, jeśli nie masz pewności, czy funkcja działa, po
Kod
$(window).on('scroll', function(){
var scrolled = $(this).scrollTop();

Dodaj sobie np. console.log(scrolled) to będziesz wiedział, jak ta wartość się zmienia w zależności od pozycji strony.
Go to the top of the page
+Quote Post
tzm
post 24.12.2014, 23:32:38
Post #12





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Nie jestem pewien co zwraca scrollTop. Najwyżej dopisz parseInt().
Go to the top of the page
+Quote Post
bahh
post 29.12.2014, 22:29:13
Post #13





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


scrollTop zwraca wartość numeryczną - pozycję od danego elementu. W naszym przypadku wysokość okna. Samo działanie funkcji mogę testować ale ta funkcja ma błąd już w strukturze. Błąd typu jak w PHP brak średnika itp. Nie mogę testować, bo po wklejeniu powyższego kodu cały jQuery nie działa. Nie wiem gdzie jest błąd w tamtejszej składni

http://jsfiddle.net/41wwyxsz/

nikt nie pomoże?
Go to the top of the page
+Quote Post
trueblue
post 29.12.2014, 22:37:09
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


.body a nie body?
If zamiast if?

Zmień == na >=

Ten post edytował trueblue 29.12.2014, 22:37:53


--------------------
Go to the top of the page
+Quote Post
bahh
post 29.12.2014, 22:39:54
Post #15





Grupa: Zarejestrowani
Postów: 261
Pomógł: 2
Dołączył: 13.05.2012

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


mam i rozwiązanie w pełni działające, jak ktoś potrzebuje niech korzysta:
  1. var animation1 = true;
  2.  
  3. $(window).scroll(function() {
  4. if ($(this).scrollTop() > 100) {
  5. if (animation1 == true)
  6. {
  7. //tutaj dajemy okreslone zadania po scrollu
  8. jQuery({someValue: 0}).animate({someValue: 20}, {
  9. duration: 2000,
  10. easing:'swing',
  11. step: function() {
  12. $('#c1').text(Math.ceil(this.someValue));
  13. }
  14. });
  15. //tutaj koniec dodawania zadan
  16. animation1 = false;
  17. }
  18. }
  19. });
Go to the top of the page
+Quote Post
com
post 29.12.2014, 22:43:08
Post #16





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


http://jsfiddle.net/41wwyxsz/1/
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: 26.04.2024 - 02:34