Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [css] [JavaScript] Element przyklejający się do ekranu po skrolowaniu., Skrypt nie do końca dobrze działa.
luis2luis
post 24.08.2017, 13:41:28
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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.
Go to the top of the page
+Quote Post
trueblue
post 24.08.2017, 13:53:09
Post #2





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

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


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ć.


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 24.08.2017, 14:28:59
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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

Ten post edytował luis2luis 24.08.2017, 14:30:16
Go to the top of the page
+Quote Post
trueblue
post 24.08.2017, 14:32:03
Post #4





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

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


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.


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 24.08.2017, 14:59:54
Post #5





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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..

Ten post edytował luis2luis 24.08.2017, 15:04:21
Go to the top of the page
+Quote Post
trueblue
post 24.08.2017, 15:04:09
Post #6





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

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


A kiedy usunąć klasę, to już nie decyduje?
Przecież cały czas wykorzystujesz go i opierasz na nim warunek.


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 24.08.2017, 15:18:55
Post #7





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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.  


Ten post edytował luis2luis 24.08.2017, 15:21:49
Go to the top of the page
+Quote Post
trueblue
post 24.08.2017, 15:19:42
Post #8





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

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


A jakie parametry zwraca funkcja offset?


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 24.08.2017, 23:54:09
Post #9





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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
Go to the top of the page
+Quote Post
trueblue
post 25.08.2017, 07:29:31
Post #10





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

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


Co się sprowadza do tego, że right=left+szerokość_elementu.
Ale możesz też używać tylko left.


--------------------
Go to the top of the page
+Quote Post
luis2luis
post 25.08.2017, 10:24:00
Post #11





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


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
Go to the top of the page
+Quote Post
ReCreator
post 11.12.2017, 19:28:23
Post #12





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 11.12.2017

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


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?

Ten post edytował ReCreator 11.12.2017, 19:28:53
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: 20.04.2024 - 00:17