div의 맨 위와 현재 화면의 맨 위 사이의 거리를 어떻게 결정합니까? 문서의 상단이 아닌 현재 화면의 상단까지의 픽셀 거리를 원합니다. 내가 좋아하는 몇 가지 시도했습니다 .offset()
과를 .offsetHeight
,하지만 난 그냥 주위에 내 머리를 래핑 수 없습니다. 감사!
답변
당신은 사용할 수 있습니다 .offset()
얻을하여 비교 오프셋 document
요소 다음 사용 scrollTop
의 특성 window
은 사용자가 스크롤 한 페이지 아래로 찾는 요소를 :
var scrollTop = $(window).scrollTop(),
elementOffset = $('#my-element').offset().top,
distance = (elementOffset - scrollTop);
distance
변수는 이제 상단으로부터의 거리가 유지 #my-element
소자와 상부 배.
데모는 다음과 같습니다. http://jsfiddle.net/Rxs2m/
음수 값은 요소가 상단 폴더 위에 있음을 의미합니다.
답변
바닐라:
window.addEventListener('scroll', function(ev) {
var someDiv = document.getElementById('someDiv');
var distanceToTop = someDiv.getBoundingClientRect().top;
console.log(distanceToTop);
});
브라우저 콘솔을 열고 거리를 보려면 페이지를 스크롤하십시오.
답변
이것은 순수하게 JavaScript 로 달성 할 수 있습니다 .
lynx 가 질문에 대한 답변을 작성하고 싶었습니다 .
그러나 어쨌든 사람들은 때때로 댓글을 읽는 것을 잊어 버리기 때문에 답을 쓸 것입니다.
따라서 화면 창의 상단에서 요소의 거리 (픽셀 단위)를 얻으려면 다음을 수행하십시오.
// Fetch the element
var el = document.getElementById("someElement");
// Use the 'top' property of 'getBoundingClientRect()' to get the distance from top
var distanceFromTop = el.getBoundingClientRect().top;
그게 다야!
희망이 누군가에게 도움이되기를 바랍니다 🙂
답변
나는 이것을 사용했다 :
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
암호:
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);
});
*/
답변
이 기능을 사용하여 요소가 뷰 포트에 보이는지 감지했습니다.
암호:
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');
}
});