Jak określić odległość między samą górą elementu div a górą bieżącego ekranu? Chcę tylko odległość w pikselach do góry bieżącego ekranu, a nie do góry dokumentu. Próbowałem kilku rzeczy, takich jak .offset()
i .offsetHeight
, ale po prostu nie potrafię się tym zająć. Dzięki!
javascript
jquery
Joel Eckroth
źródło
źródło
el.getBoundingClientRect().top+window.scrollY
el.getBoundingClientRect().top
. Dodanie pozycji przewijania sumuje odległość do góry dokumentu. developer.mozilla.org/de/docs/Web/API/Element/ ...Odpowiedzi:
Możesz użyć,
.offset()
aby uzyskać przesunięcie w porównaniu zdocument
elementem, a następnie użyćscrollTop
właściwościwindow
elementu, aby sprawdzić, jak daleko w dół strony przewinął użytkownik:var scrollTop = $(window).scrollTop(), elementOffset = $('#my-element').offset().top, distance = (elementOffset - scrollTop);
distance
Zmienna posiada obecnie odległości od góry#my-element
elementem a górnym-krotnie.Oto demo: http://jsfiddle.net/Rxs2m/
Zwróć uwagę, że wartości ujemne oznaczają, że element znajduje się powyżej górnej części strony widocznej na ekranie.
źródło
distance
zmienną, aby zobaczyć, czy jej wartość jest,120
ale polecam sprawdzenie zakresu zamiast dokładnej liczby. Jeśli na przykład przewijasz kółkiem myszy, możesz bardzo dobrze przeskoczyć ponad 120. Więc jeśli próbujesz zastosować jakiś CSS lub coś innego, gdy element znajduje się w odległości 120 pikseli od górnej części ekranu, może użyjif (distance < 120) { /* do something */}
. Oto zaktualizowane demo: jsfiddle.net/na5qL91oWanilia:
window.addEventListener('scroll', function(ev) { var someDiv = document.getElementById('someDiv'); var distanceToTop = someDiv.getBoundingClientRect().top; console.log(distanceToTop); });
Otwórz konsolę przeglądarki i przewiń stronę, aby zobaczyć odległość.
źródło
distanceToTop
zwracana jest wartość względna (może być nawet ujemna, jeśli użytkownik przewinął listę). Aby to uwzględnić, użyjwindow.pageYOffset + someDiv.getBoundingClientRect().top
Można to osiągnąć wyłącznie za pomocą JavaScript .
Widzę, że odpowiedź, którą chciałem napisać, została udzielona przez lynx w komentarzach do pytania.
Ale i tak napiszę odpowiedź, ponieważ tak jak ja ludzie czasami zapominają o przeczytaniu komentarzy.
Tak więc, jeśli chcesz po prostu uzyskać odległość elementu (w pikselach) od góry okna ekranu, oto co musisz zrobić:
// Fetch the element var el = document.getElementById("someElement");
użyj getBoundingClientRect ()
// Use the 'top' property of 'getBoundingClientRect()' to get the distance from top var distanceFromTop = el.getBoundingClientRect().top;
Otóż to!
Mam nadzieję, że to komuś pomoże :)
źródło
Użyłem tego:
myElement = document.getElemenById("xyz"); Get_Offset_From_Start ( myElement ); // returns positions from website's start position Get_Offset_From_CurrentView ( myElement ); // returns positions from current scrolled view's TOP and LEFT
kod:
function Get_Offset_From_Start (object, offset) { offset = offset || {x : 0, y : 0}; offset.x += object.offsetLeft; offset.y += object.offsetTop; if(object.offsetParent) { offset = Get_Offset_From_Start (object.offsetParent, offset); } return offset; } function Get_Offset_From_CurrentView (myElement) { if (!myElement) return; var offset = Get_Offset_From_Start (myElement); var scrolled = GetScrolled (myElement.parentNode); var posX = offset.x - scrolled.x; var posY = offset.y - scrolled.y; return {lefttt: posX , toppp: posY }; } //helper function GetScrolled (object, scrolled) { scrolled = scrolled || {x : 0, y : 0}; scrolled.x += object.scrollLeft; scrolled.y += object.scrollTop; if (object.tagName.toLowerCase () != "html" && object.parentNode) { scrolled=GetScrolled (object.parentNode, scrolled); } return scrolled; } /* // live monitoring window.addEventListener('scroll', function (evt) { var Positionsss = Get_Offset_From_CurrentView(myElement); console.log(Positionsss); }); */
źródło
Użyłem tej funkcji do wykrycia, czy element jest widoczny w porcie widoku
Kod:
const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0); $(window).scroll(function(){ var scrollTop = $(window).scrollTop(), elementOffset = $('.for-scroll').offset().top, distance = (elementOffset - scrollTop); if(distance < vh){ console.log('in view'); } else{ console.log('not in view'); } });
źródło