




{"id":280,"date":"2024-03-14T13:31:28","date_gmt":"2024-03-14T12:31:28","guid":{"rendered":"https:\/\/intranet.projektninja.com\/?p=280"},"modified":"2024-06-15T18:34:55","modified_gmt":"2024-06-15T16:34:55","slug":"js-funkcja-sprawdzajaca-czy-obiekt-zostal-zescrollowany-poza-ekran","status":"publish","type":"post","link":"https:\/\/projektninja.com\/devblog\/rozniaste\/js-funkcja-sprawdzajaca-czy-obiekt-zostal-zescrollowany-poza-ekran\/","title":{"rendered":"Sprawdzanie widoczno\u015bci obiektu podczas przewijania w WordPress za pomoc\u0105 JavaScript"},"content":{"rendered":"\n<p>W niekt\u00f3rych przypadkach warto sprawdzi\u0107, czy dany obiekt na stronie zosta\u0142 przewini\u0119ty poza widoczny obszar ekranu. Poni\u017cej znajdziesz funkcj\u0119 JavaScript, kt\u00f3ra pozwala na to sprawdzenie w WordPress.<\/p>\n\n\n\n<p><strong>Kod JavaScript<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function czyZescrollowany(element) {\n  let timeout = null; \/\/ Zmienna do przechowywania identyfikatora op\u00f3\u017anienia\n  \/\/ Zapisanie pocz\u0105tkowej pozycji Y elementu\n  const initialTopPosition = element.getBoundingClientRect().top + window.pageYOffset;\n\n  const checkPositionAndToggleClass = () => {\n    \/\/ Aktualna pozycja przewijania\n    const currentScrollPosition = window.pageYOffset;\n\n    \/\/ Sprawdzenie, czy element jest powy\u017cej g\u00f3rnej granicy ekranu wzgl\u0119dem jego pocz\u0105tkowej pozycji\n    if(currentScrollPosition > initialTopPosition) {\n      \/\/ Nadanie klasy tylko, je\u015bli element jest \"zescrollowany\" i nie ma jeszcze klasy 'zescrollowany'\n      if (!element.classList.contains('zescrollowany')) {\n        element.classList.add('zescrollowany');\n      }\n    } else {\n      \/\/ Usuni\u0119cie klasy, je\u015bli element jest poni\u017cej g\u00f3rnej granicy ekranu i ma klas\u0119 'zescrollowany'\n      if (element.classList.contains('zescrollowany')) {\n        element.classList.remove('zescrollowany');\n      }\n    }\n  };\n\n  const debounceCheckPosition = () => {\n    \/\/ Czyszczenie poprzedniego op\u00f3\u017anienia, je\u015bli istnieje\n    if (timeout !== null) {\n      clearTimeout(timeout);\n    }\n    \/\/ Ustawienie op\u00f3\u017anienia dla funkcji sprawdzaj\u0105cej pozycj\u0119\n    timeout = setTimeout(checkPositionAndToggleClass, 100); \/\/ Op\u00f3\u017anienie 100ms\n  };\n\n  \/\/ Nas\u0142uchiwanie przewijania okna i uruchomienie funkcji z op\u00f3\u017anieniem\n  window.addEventListener('scroll', debounceCheckPosition);\n  \n  \/\/ Wywo\u0142anie funkcji na starcie, aby od razu ustawi\u0107 poprawny stan klasy\n  debounceCheckPosition();\n}\n\n\/\/ U\u017cycie funkcji z konkretnym elementem, np. document.querySelector('.jakisElement')\n\/\/ czyZescrollowany(document.querySelector('.jakisElement'));\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Wyja\u015bnienia:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Definicja funkcji i zmiennej timeout<\/strong>: Funkcja <code>czyZescrollowany<\/code> przyjmuje element jako argument. Definiujemy zmienn\u0105 <code>timeout<\/code> do przechowywania identyfikatora op\u00f3\u017anienia oraz zapisujemy pocz\u0105tkow\u0105 pozycj\u0119 Y elementu.<\/li>\n\n\n\n<li><strong>Sprawdzenie pozycji i nadanie klasy<\/strong>: Funkcja <code>checkPositionAndToggleClass<\/code> sprawdza aktualn\u0105 pozycj\u0119 przewijania i por\u00f3wnuje j\u0105 z pocz\u0105tkow\u0105 pozycj\u0105 elementu, nadaj\u0105c lub usuwaj\u0105c odpowiedni\u0105 klas\u0119.<\/li>\n\n\n\n<li><strong>Debounce funkcji sprawdzaj\u0105cej pozycj\u0119<\/strong>: Funkcja <code>debounceCheckPosition<\/code> wprowadza op\u00f3\u017anienie w sprawdzaniu pozycji, aby unikn\u0105\u0107 zbyt cz\u0119stego wywo\u0142ywania.<\/li>\n\n\n\n<li><strong>Nas\u0142uchiwanie przewijania i pocz\u0105tkowe sprawdzenie<\/strong>: Dodajemy nas\u0142uchiwanie zdarzenia przewijania i uruchamiamy funkcj\u0119 sprawdzaj\u0105c\u0105 pozycj\u0119 na starcie.<\/li>\n\n\n\n<li><strong>U\u017cycie funkcji<\/strong>: U\u017cywamy funkcji <code>czyZescrollowany<\/code> z konkretnym elementem, np. <code>document.querySelector('.jakisElement')<\/code>.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak za pomoc\u0105 JavaScript sprawdzi\u0107, czy obiekt na stronie WordPress zosta\u0142 przewini\u0119ty poza ekran.<\/p>\n","protected":false},"author":1,"featured_media":557,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[275],"tags":[159,30,155,101,149,137,160,13,154],"class_list":["post-280","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rozniaste","tag-funkcje-javascript","tag-javascript","tag-optymalizacja-ux","tag-scroll","tag-tutorial","tag-web-development","tag-widocznosc-elementu","tag-wordpress","tag-zarzadzanie-strona"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/posts\/280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/comments?post=280"}],"version-history":[{"count":1,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/posts\/280\/revisions"}],"predecessor-version":[{"id":413,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/posts\/280\/revisions\/413"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/media\/557"}],"wp:attachment":[{"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/media?parent=280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/categories?post=280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projektninja.com\/devblog\/wp-json\/wp\/v2\/tags?post=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}