Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [css] [JavaScript] Element przyklejający się do ekranu po skrolowaniu.
Forum PHP.pl > Forum > Po stronie przeglądarki
luis2luis
Witam.

Przygotowałem skrypt, który przykleja element do okna przeglądarki (position:fixed) gdy górna kraweź przeglądarka zjeżdżając w dół, scrolując osiągnie już ten element

Już mniej więcej działa, jak osiągne górną granice tego elementu, to zmienia sie pozycja.


  1.  
  2. <script>
  3. $(document).ready(function() {
  4.  
  5. $(document).on('scroll', function() {
  6.  
  7. var header_height = $("#top-fixed-menu").outerHeight();
  8. var offset = $("#top-fixed-menu").offset();//offset czyli pozycja wzgleden góry strony.
  9.  
  10. var offset_top = offset.top;
  11.  
  12. if ($(window).width() > 960) {//tylko dla szerokich monitorów
  13. if ($(window).scrollTop() >= offset_top) {
  14.  
  15. $("#top-fixed-menu").addClass("fly_lista");
  16. } else {
  17.  
  18. $("#top-fixed-menu").removeClass("fly_lista");
  19. }
  20. }
  21. });
  22. });
  23. </script>
  24.  
  25. <style>
  26. #top-fixed-menu { position: relative; background: #262f36; float: right; width: 380px; min-height: 100px; color: #fff; }
  27. .fly_lista { position: fixed !important; top: 0px !important; right: 0px !important; }
  28. </style>
  29.  


Prosze o pokierowanie. Widzę, że w momencie gdy element dostaje position fixed, parametr top jest dosyc łatwy do określenia ale co z pozycją right? :/
Dodatkowo jak wracam spowrotem na góre to element dalej ma pozycje fixed. Coś nie tak jest z kodem javascript.
trueblue
Skoro element po dodaniu klasy .fly_lista ma pozycję fixed, to jaki jest sens pobierania wtedy jego pozycji (offset)?

A co do położenia od prawej, to trudno Ci odpowiedzieć, bo nie wiadomo jaka jest jego pozycja kiedy nie jest zafiksowany. Chyba, że przed przyklejeniem również jest umiejscowiony przy prawej krawędzi. Wtedy nic nie trzeba zmieniać.
luis2luis
Cytat(trueblue @ 24.08.2017, 14:53:09 ) *
Skoro element po dodaniu klasy .fly_lista ma pozycję fixed, to jaki jest sens pobierania wtedy jego pozycji (offset)?

A co do położenia od prawej, to trudno Ci odpowiedzieć, bo nie wiadomo jaka jest jego pozycja kiedy nie jest zafiksowany. Chyba, że przed przyklejeniem również jest umiejscowiony przy prawej krawędzi. Wtedy nic nie trzeba zmieniać.



Ofset pobieram tylko po to, żeby wiedzieć kiedy okno przeglądarki "osiągneło" już ten element.

Późnije ju żgo nie potrzebuje, chodzi tetraz o to, że element pozycjonowany jako fixed uciekami na praą częśc okna przeglądarki. Przed fixowaniem jest w prawej części kontenera strony, który ma 1300 pixeli. Jego style są tutaj: pod znacznikiem: #top-fixed-menu
trueblue
Nie potrzebujesz, ale wykorzystujesz. Przecież na tym jest oparty warunek.
Jeśli rozwiążesz ten problem, to będziesz wiedział co począć z właściwością right.
luis2luis
Cytat(trueblue @ 24.08.2017, 15:32:03 ) *
Nie potrzebujesz, ale wykorzystujesz. Przecież na tym jest oparty warunek.
Jeśli rozwiążesz ten problem, to będziesz wiedział co począć z właściwością right.


dzieki za odpowiedzi.

Jeśli mnie oczy nie mylą, parametr ofset decyduje o tym kiedy dodac klase ".fly_lista". Klasa doaje siępoprawnie, ale jak wyjde wyżej to już nie jest kasowanato jest jedne z tych problemów.

--- aha wiem-

powineniem wartość offset.top zapisac sobie poza tym zdażeniem jako zmienną przekazać do skryptu, ponieważ później jak już element jest zafixowany to wtedy fixowany element już offset.top nie złapie.

pozostaje problem z pozycją od prawego boku ekranuj..
trueblue
A kiedy usunąć klasę, to już nie decyduje?
Przecież cały czas wykorzystujesz go i opierasz na nim warunek.
luis2luis
Rozwiązałem już jedną sprawe tego, że klasa fly sie nie wyłącza.

Czy do wyznaczenia parametru css('right', questionmark.gif? ); potrzebuje ten mechanizm offset ?

  1.  
  2. var offset = $("#top-fixed-menu").offset();//offset czyli pozycja wzgleden góry strony.
  3. var sum_height = offset.top; //header_height+offset.top; //topmenu_height + header_height + menu_height;
  4.  
  5. $(document).on('scroll', function() {
  6.  
  7. var header_height = $("#top-fixed-menu").outerHeight();
  8.  
  9. if ($(window).width() > 960) {
  10. if ($(window).scrollTop() >= offset.top) {
  11. $(".#top-fixed-menu").addClass("fly_lista");
  12.  
  13. } else {
  14. $(".#top-fixed-menu").removeClass("fly_lista");
  15. }
  16. }
  17.  
  18. });
  19.  
trueblue
A jakie parametry zwraca funkcja offset?
luis2luis
Cytat(trueblue @ 24.08.2017, 16:19:42 ) *
A jakie parametry zwraca funkcja offset?



Działa. Kurde nie wpadłbym, że funkcja ofset zwraca tylko left i top.

Dziękuje dobry człowieku za pomoc smile.gif
trueblue
Co się sprowadza do tego, że right=left+szerokość_elementu.
Ale możesz też używać tylko left.
luis2luis
Cytat(trueblue @ 25.08.2017, 08:29:31 ) *
Co się sprowadza do tego, że right=left+szerokość_elementu.
Ale możesz też używać tylko left.


ok dziekuje, samo left wystarcza w zupełności smile.gif
ReCreator
Cytat(luis2luis @ 24.08.2017, 15:18:55 ) *
Rozwiązałem już jedną sprawe tego, że klasa fly sie nie wyłącza.


Mógł bym prosić kod z poprawnie działającyą funkcją usuwania klasy podczas powrotu?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.