JavaScriptを使用して、divの上部からウィンドウの上部までの距離を決定する


127

divの最上部から現在の画面の最上部までの距離をどのように決定しますか?ドキュメントの上端ではなく、現在の画面の上端までのピクセル距離が欲しいだけです。.offset()andのようないくつかのことを試してみましたが、私は.offsetHeightそれに頭を抱えることができません。ありがとう!


2
あなたはこれ
ジョセフ

7
el.getBoundingClientRect().top+window.scrollY
caub 2016年

3
@caubええ、それだけel.getBoundingClientRect().topです。スクロール位置を追加すると、ドキュメントの上部までの距離が追加されます。developer.mozilla.org/de/docs/Web/API/Element/…–
lynx

ええ、ちょうどjerquerifyしたかった
caub

回答:


239

を使用.offset()して、document要素と比較してオフセットを取得し、要素のscrollTopプロパティを使用windowして、ユーザーがページをどれだけ下にスクロールしたかを確認できます。

var scrollTop     = $(window).scrollTop(),
    elementOffset = $('#my-element').offset().top,
    distance      = (elementOffset - scrollTop);

これで、distance変数は#my-element要素の上部と上部折り目からの距離を保持します。

ここにデモがあります:http : //jsfiddle.net/Rxs2m/

負の値は、要素がトップフォールドの上にあることを意味することに注意してください。


距離が特定の数値かどうかを確認するにはどうすればよいですか?要素が上から120px離れている場合に要素をスティッキーにしたい
Thessa Verbruggen

@ThessaVerbruggen distance変数をチェックして、その値が正しいかどうかを確認できますが120、正確な数値ではなく範囲を確認することをお勧めします。たとえば、マウスホイールでスクロールする場合は、120をスキップできます。そのため、要素が上折りの120ピクセル以内にあるときにCSSや何かを適用しようとしている場合は、を使用しますif (distance < 120) { /* do something */}。これが更新されたデモです:jsfiddle.net/na5qL91o
Jasper

これを行う場合の1つの問題:スクロールすると、粘着性のある部分が点滅します。スクロールすると再計算されるためだと思います。これを修正する方法はありますか?私のコード:$(window).on( 'scroll'、function(){var scrollTop = $(window).scrollTop()、elementOffset = $( '#secondary')。offset()。top、distance =(elementOffset -scrollTop); if(distance <120){$( '#secondary')。addClass( 'sticky');} else {$( '#secondary')。removeClass( 'sticky');}});
Thessa Verbruggen

60

バニラ:

window.addEventListener('scroll', function(ev) {

   var someDiv = document.getElementById('someDiv');
   var distanceToTop = someDiv.getBoundingClientRect().top;

   console.log(distanceToTop);
});

ブラウザコンソールを開き、ページをスクロールして距離を確認します。


14
これは、ユーザーがページをスクロールしていない場合にのみ機能します。それ以外の場合、distanceToTop相対的な値が返されます(ユーザーが過去にスクロールした場合は負の値になることもあります)。これを考慮するには、window.pageYOffset + someDiv.getBoundingClientRect().top
tyを

2
@ty OPは、ドキュメントの上部ではなく、画面の上部までの距離を探しています。この場合、負の値が有効です
Drenai

16

これは純粋にJavaScriptで実現できます

私が書きたかった答えは、質問へのコメントでlynxによって答えられたのがわかります。

しかし、私と同じように、人々は時々コメントを読むことを忘れるので、とにかく答えを書きます。

したがって、画面ウィンドウの上部から要素の距離(ピクセル単位)を取得するだけの場合は、次のようにします。

// Fetch the element
var el = document.getElementById("someElement");  

getBoundingClientRect()を使用します

// Use the 'top' property of 'getBoundingClientRect()' to get the distance from top
var distanceFromTop = el.getBoundingClientRect().top; 

それでおしまい!

これが誰かを助けることを願っています:)


1
getBoundingClient()は機能せず、代わりに.getBoundingClientRect()
Elnoor

@Elnoor提案ありがとうございます:)適切な変更を加えました。
Furqan Rahamath

@MohammedFurqanRahamathM。回答ありがとうございます:)それは魅力のように動作します!! :)
Merianos Nikos

1
@MerianosNikosありがとうございます。お役に立てて嬉しいです:)
Furqan Rahamath '20 / 07/20

1
しかし、これはページの中央でリロードしていない場合にのみ機能しますか?
Sagive SEO

7

私はこれを使いました:

                              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);
    });
    */

element.offsetTopが存在することを示すための+1。element.getBoundingClientRect()。topが奇妙な動作をしてくれます。Webページの上部から要素の上部までの距離を取得しようとしていました。
alexandre1985

0

この関数を使用して、要素がビューポートに表示されるかどうかを検出しました

コード:

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');
}
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.