Skocz do zawartości

Zdjęcie
* * * * * 1 głosy

Skrypt na zamianę klasy


6 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
wolfdz

    Stary wyjadacz

  • PipPipPip
  • 252 postów
    • Czas spędzony online: 10d 19m 41s
14
Dobra
  • LocationKraśnik

Napisano 24 grudnia 2014 - 23:44

#1

Witajcie.

Jestem słaby z JS ale chciałem to zmienić. Jednak napotkałem pierwsze schody.

Chciałbym uzyskać jakieś podpowiedzi dot. mojego problemu. Domyślnie jest wpisana klasa w dokumencie html (class="hiding") i ma ustawiony css, i chce teraz, że gdy scrollem trafimy na ten obiekt z tą klasą to skrypt nadpisuje go inną (class="visible"). Mogę prosić jakieś podpowiedzi dot. stworzenia tego?


  • 0

zonic

    WT Elite

  • 2 911 postów
    • Czas spędzony online: 134d 2h 28m 23s
472
Znakomita!
  • LocationToruń

Napisano 25 grudnia 2014 - 00:54

#2

Sama zmiana klasy, to zapewne coś na zasadzie:
 

if ( $('#twoj_div').hasClass('hidding') ) {
    $('#twoj_div').removeClass('hidding').addClass('visible');
}

Czyli sprawdzamy czy taka klasa jest, jeśli jest to ją usuwamy i dajemy inną.


Co rozumiesz przez stwierdzenie:


scrollem trafimy na ten obiekt





Że jest on widoczny w danym momencie na ekranie?


  • 0

Yeoman

    Stary wyjadacz

  • 358 postów
    • Czas spędzony online: 6d 19h 43m 48s
169
Znakomita!
  • LocationKatowice

Napisano 25 grudnia 2014 - 10:25

#3

Generalnie to musisz znać pozycję swojego elementu, wiedzieć na jakim etapie jest pasek przewijania i pewnie do tego dojdzie wysokość dokumentu w przypadku iż miałby on być większy i odkrywać Twój element od razu, więc wtedy ustawiłbyś element już statycznie.

 

Przydać Ci się może:

 

http://api.jquery.com/scrollTop/

http://api.jquery.com/offset/

http://api.jquery.com/height/

http://api.jquery.com/outerHeight/

 

Myślę, że na początek wystarczy :P


  • 1

2ed58r7.png


mkol

    Nowy użytkownik

  • 16 postów
    • Czas spędzony online: 22h 38m 7s
9
Neutralna

Napisano 25 grudnia 2014 - 10:35

#4
.onScreen(); - A jQuery plugin that does stuff to elements when they enter or leave the viewport
  • 0

wolfdz

    Stary wyjadacz

  • PipPipPip
  • 252 postów
    • Czas spędzony online: 10d 19m 41s
14
Dobra
  • LocationKraśnik

Napisano 25 grudnia 2014 - 11:33

#5

Sama zmiana klasy, to zapewne coś na zasadzie:
 

if ( $('#twoj_div').hasClass('hidding') ) {
    $('#twoj_div').removeClass('hidding').addClass('visible');
}

Czyli sprawdzamy czy taka klasa jest, jeśli jest to ją usuwamy i dajemy inną.


Co rozumiesz przez stwierdzenie:





Że jest on widoczny w danym momencie na ekranie?

 

Dokładnie tak, nie wiedziałem jak to nazwać :)

 

 

Generalnie to musisz znać pozycję swojego elementu, wiedzieć na jakim etapie jest pasek przewijania i pewnie do tego dojdzie wysokość dokumentu w przypadku iż miałby on być większy i odkrywać Twój element od razu, więc wtedy ustawiłbyś element już statycznie.

 

Przydać Ci się może:

 

http://api.jquery.com/scrollTop/

http://api.jquery.com/offset/

http://api.jquery.com/height/

http://api.jquery.com/outerHeight/

 

Myślę, że na początek wystarczy :P

 

Tylko, że dane sekcje nie będą miały określonej wysokości, dlatego najlepiej jakby była taka możliwość aby skrypt automatycznie wykrywał kiedy jest aktywna sekcja na ekranie i wtedy dokonywał zamiany klasy.


  • 0

Yeoman

    Stary wyjadacz

  • 358 postów
    • Czas spędzony online: 6d 19h 43m 48s
169
Znakomita!
  • LocationKatowice

Napisano 25 grudnia 2014 - 13:24

#6

Nie chodziło mi o wysokość sekcji, ale o wysokość dokumentu oraz okna.

 

Gdy przewijasz stronę, musisz wiedzieć kiedy się skończy lub kiedy dojedziesz do początku. Powiedzmy że sekcja będzie na środku dokumentu więc musisz ustalić pozycję za pomocą offset().top, a później sprawdzić czy ta pozycja jest równa pozycji na którą przewinąłeś stronę. Coś w tym kierunku. Bez obliczeń się nie obejdzie :)

 

Przeanalizuj tą funkcje:

function isOnScreen(element) {

    var elementOffsetTop = $(element).offset().top,
        elementHeight = $(element).height(),
        screenScrollTop = $(window).scrollTop(),
        screenHeight = $(window).height(),
        scrollIsAboveElement = elementOffsetTop + elementHeight - screenScrollTop >= 0,
        elementIsVisibleOnScreen = screenScrollTop + screenHeight - elementOffsetTop >= 0;

    return scrollIsAboveElement && elementIsVisibleOnScreen;

}

Zwraca true jeśli element znajdzie się w polu widzenia. Wtedy wrzucasz to w onScroll oraz $.each (w przypadku większej ilości elementów) i wykonujesz swoją akcję jeśli funkcja zwróci true.


  • 1

2ed58r7.png


mkol

    Nowy użytkownik

  • 16 postów
    • Czas spędzony online: 22h 38m 7s
9
Neutralna

Napisano 25 grudnia 2014 - 13:38

#7

.onScreen(); - A jQuery plugin that does stuff to elements when they enter or leave the viewport


Prostsza wersja tego: onScreen jQuery plugin v0.2.1. Dodaje tylko selektor :onScreen, ale w kodzie jest dobrze widoczne, jakie są warunki widoczności elementu.
  • 1





Podone tematy Collapse

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych