Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] załadowanie skryptu dopiero po wyświetleniu diva w oknie przeglądarki
Forum PHP.pl > Forum > Przedszkole
blokern
cześć w jaki sposób odpalić skrypt JS dopiero w momencie w którym w oknie przeglądarki zobaczę w 100% element w tym przypadku div o id="xyz"?

np

  1. </head>
  2. <h1>test</h1>
  3. <div style="height: 2300px;">abc</div>
  4. <div id="xyz" style="width: 10px; height: 10px; background: #ff6600;"></div>
  5. </body>
  6. </html>


reasumując: wchhodzę na stronę, przewijam stronę w dół i jak w widze warste xyz to załadowuje mi sie skrypt

z góry dziekuje za pomoc
SmokAnalog
Pobierasz pozycję elementu w pionie i przy scrollowaniu sprawdzasz czy pozycja okna pokrywa się z pozycją tego elementu. Możesz do tego dodać więcej matematyki i sprawdzać też czy element nie jest czasem widoczny od dołu. Wtedy będziesz potrzebował też wysokości elementu do obliczeń oraz wysokości okna przeglądarki.
blokern
dziekuje SmokAnalog smile.gif

mam taki dzialajacy kod, jak slowo Hello znajdzie sie w oknie przegladarki to wyswietli sie w consoli slowo hura.
jak zrobic zeby sumowal w sekundach czas wyswietlania sie hura w consoli?


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  5. <script>
  6. function log(txt) {
  7. var wys = ($(window).height())
  8. if((txt)>=0){
  9. if((wys)>=(txt)){
  10. console.log('hura')
  11. }
  12. }
  13. }
  14. $(function() {
  15. var eTop = $('#element').offset().top;
  16. log(eTop - $(window).scrollTop());
  17. $(window).scroll(function() {
  18. log(eTop - $(window).scrollTop());
  19. });
  20. });
  21. </script>
  22. </head>
  23. <body>
  24. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  25. <div style="height: 1000px;"></div>
  26. <div id="element">Hello</div>
  27. <div style="height: 1800px;"></div>
  28. </body>
  29. </html>
  30.  
  31.  
SmokAnalog
Żeby sumować czas przy zdarzeniu, użyj setInterval() kiedy zdarzenie zachodzi i clearInterval(), kiedy już nie zachodzi. Nie wiem co dokładnie chcesz zrobić, ale najlepiej sumuj jakąś mniejszą porcję czasu niż sekundy, np. 100ms. Jeśli zrobić pełne sekundy, to przy szybkim scrollowaniu licznik złapie zero. No chyba, że tak ma być smile.gif
blokern
smile.gif setInterval() - dokladnie i wywoluje przy zdarzeniu czyli zaraz w ifie tylko, ze zle zrobilem bo wszystko i tak wywoluje sie przy scrolowaniu $(window).scroll(function() a jak to przerobic tak zeby dzialalo w tle (sprawdzalo pozycje bez scrolowania a poprostu w tle dzialania strony?
SmokAnalog
Ten setInterval() ustawiasz na scrollu, ale tylko jeśli nie jest aktualnie ustawiony. To jest łatwo sprawdzić, po prostu zapisuj go (lub sam stan) w jakiejś zmiennej i sprawdzaj.
blokern
sam sobie odpowiem. pewnie kod bardzo zle napisany ale dziala i teraz co sekunde pokazuje mi komunikat "jep" jezeli "Hello" znajduje sie w oknie przegladarki

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  5. <script>
  6. setInterval("abc();",1000);
  7. function abc(){
  8. var eTop = $('#element').offset().top;
  9. var roznica = eTop - $(window).scrollTop();
  10. var wys = ($(window).height())
  11. if((roznica)>=0){
  12. if((wys)>=(roznica)){
  13. console.log('jep')
  14. }
  15. }
  16. }
  17. </script>
  18. </head>
  19. <body>
  20. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  21. <div style="height: 1000px;"></div>
  22. <div id="element">Hello</div>
  23. <div style="height: 1800px;"></div>
  24. </body>
  25. </html>
SmokAnalog
Tak też może być w sumie smile.gif Zrobiłeś inaczej, bo u Ciebie interval działa cały czas i albo dodaje, albo nie. Moja wersja zakładała, że interval w ogóle nie działa, kiedy element jest poza oknem.

Taka ciekawostka - zamiast pisać:
[JAVASCRIPT] pobierz, plaintext
  1. setInterval("abc();", 1000);
[JAVASCRIPT] pobierz, plaintext


Wystarczy po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. setInterval(abc, 1000);
[JAVASCRIPT] pobierz, plaintext
blokern
to z (abc,1000) zapamietam. dzieki smile.gif

ogolnie tak to wyglada... ale napisz prosze na co zwrocic uwage przy modyfikacji zeby skrypt tak jak wspomniales dzialal tylko jak element jest w oknie przegladarki?

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  5. <script>
  6. time = 0;
  7. setInterval(abc,1000);
  8. function abc(){
  9. var eTop = $('#gora').offset().top;
  10. var eTopDol = $('#dol').offset().top;
  11. var roznica = eTop - $(window).scrollTop();
  12. var roznicaDol = eTopDol - $(window).scrollTop();
  13. var wys = ($(window).height())
  14. if((roznica)>=0){
  15. if((wys)>=(roznica)){
  16. var gora = 1;
  17. if((wys)>=(roznicaDol)){
  18. if((roznicaDol)>=200){
  19. var dol = 1;
  20. if((gora+dol)>=2){
  21. console.log(gora+dol);
  22. time++;
  23. if((time)==5){
  24. console.log('boom'); //tutaj zliczam statystyki
  25. }
  26. }
  27. }
  28. }
  29. }
  30. }
  31. }
  32. </script>
  33. </head>
  34. <body>
  35. <div style="height: 1000px;"></div>
  36. <div id="gora"style="border-top: 1px solid #000;"></div>
  37. <div style="height: 200px;">box co ma 200px wysokosci</div>
  38. <div id="dol" style="border-top: 1px solid #000;"></div>
  39. <div style="height: 1000px;"></div>
  40. </body>
  41. </html>
SmokAnalog
A może powiedz najpierw do czego Ci jest potrzebne to zliczanie czasu, kiedy element jest widoczny? To jest jakaś informacja czy używasz tego np. przy animacji?
blokern
mam serwis internetowy i chce sprawdzic czy sa widoczne moje reklamy przez dluzszy czas niz 5 sekund i dlatego odliczanie do 5 sekund jest mi potrzebne kiedy div o id gora i div o id dol jest widoczne w oknie przegladarki - skrypt smiga ciagle ale wspomniales ze moze tylko wtedy kiedy dany element sie pokaze?
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-2025 Invision Power Services, Inc.