Bestimmen Sie mit JavaScript den Abstand vom oberen Rand eines „Div“ zum oberen Rand des Fensters

Lesezeit: 5 Minuten

Joel Eckroths Benutzeravatar
Joel Eckroth

Wie bestimme ich den Abstand zwischen dem oberen Rand eines Divs und dem oberen Rand des aktuellen Bildschirms?

Ich möchte nur den Pixelabstand zum oberen Rand des aktuellen Bildschirms, nicht zum oberen Rand des Dokuments. Ich habe ein paar Dinge ausprobiert, z .offset() Und .offsetHeightaber ich komme einfach nicht damit klar.

  • Sie möchten vielleicht Schauen Sie sich das an

    – Joseph

    26. März 2012 um 21:59


  • el.getBoundingClientRect().top+window.scrollY

    – kaub

    29. Januar 2016 um 19:43


  • @caub Eh, es ist einfach el.getBoundingClientRect().top. Durch Hinzufügen der Bildlaufposition ergibt sich der Abstand zum oberen Rand des Dokuments. Developer.mozilla.org/de/docs/Web/API/Element/…

    – Stewo

    30. November 2016 um 21:17 Uhr

  • Ja richtig, ich wollte nur die Abfrage aufheben

    – kaub

    30. November 2016 um 22:09

Sie können verwenden .offset() um den Offset im Vergleich zum zu erhalten document Element und verwenden Sie dann das scrollTop Eigentum der window Element, um herauszufinden, wie weit der Benutzer auf der Seite nach unten gescrollt hat:

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

Der distance Die Variable enthält jetzt den Abstand vom oberen Rand des #my-element Element und der oberen Falte.

Hier ist eine Demo: http://jsfiddle.net/Rxs2m/

Beachten Sie, dass negative Werte bedeuten, dass sich das Element über der oberen Falte befindet.

  • Wie kann ich überprüfen, ob es sich bei der Entfernung um eine bestimmte Zahl handelt? Ich möchte ein Element klebrig machen, wenn es 120 Pixel von der Oberseite entfernt ist

    – Thessa Verbruggen

    31. Okt. 2019 um 16:57 Uhr

  • @ThessaVerbruggen Sie können das überprüfen distance Variable, um zu sehen, ob ihr Wert vorhanden ist 120 Ich würde jedoch empfehlen, nach einem Bereich statt nach einer genauen Zahl zu suchen. Wenn Sie zum Beispiel mit einem Mausrad scrollen, können Sie durchaus über 120 hinwegspringen. Wenn Sie also versuchen, CSS oder etwas Ähnliches anzuwenden, während sich das Element innerhalb von 120 Pixeln von der oberen Falte befindet, dann verwenden Sie vielleicht if (distance < 120) { /* do something */}. Hier ist eine aktualisierte Demo: jsfiddle.net/na5qL91o

    – Jaspis

    31. Okt. 2019 um 22:55 Uhr

  • Ein Problem, wenn ich das mache: Der klebrige Teil blinkt, wenn ich scrolle. Ich vermute, weil es neu berechnet wird, wenn ich scrolle. Irgendeine Idee, wie man das beheben kann? Mein Code: $(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

    4. November 2019 um 14:19 Uhr

Benutzeravatar von Pratikno Rulianto
Pratikno Rulianto

Vanille:

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

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

   console.log(distanceToTop);
});

Öffnen Sie Ihre Browserkonsole und scrollen Sie auf Ihrer Seite, um die Entfernung anzuzeigen.

  • Dies funktioniert nur, wenn der Benutzer die Seite nicht gescrollt hat. Ansonsten distanceToTop zurückgegeben ist relativ (kann sogar negativ sein, wenn der Benutzer vorbei gescrollt hat). Um dies zu berücksichtigen, verwenden Sie window.pageYOffset + someDiv.getBoundingClientRect().top

    – Ty.

    1. September 2018 um 18:27 Uhr


  • @ty Das OP sucht nach dem Abstand zum oberen Bildschirmrand, nicht zum oberen Rand des Dokuments – in diesem Fall wäre ein negativer Wert gültig

    – Drenai

    25. März 2019 um 19:54

  • Das ist es auch, was ich brauchte. Ich verwende die von Vue geröstete Bibliothek und sie erlaubt nur die Anzeige der Toasts an absoluten Positionen auf dem Bildschirm. Ich wollte, dass der Toast in der Nähe der Schaltfläche angezeigt wird, auf die ich in einer Tabelle geklickt habe, und musste letztendlich getBoundingClientRect().top in einem Scroll-Ereignis verwenden. Dasselbe habe ich auch bei einem Größenänderungsereignis gemacht. Vielleicht möchten Sie das hinzufügen, wenn Sie den Abstand zum oberen Bildschirmrand wie folgt berechnen – man weiß nie, was der Client am Ende tun wird.

    – der Typ

    13. März 2021 um 23:20 Uhr

  • @ty. In der Zwischenzeit window.pageYOffset ist veraltet. Bessere Nutzung window.scrollY.

    – Tom Böttger

    22. Dezember 2021 um 21:14 Uhr

  • @ty. So hilfreich!

    – Franco Maldonado

    24. März um 15:56

Benutzeravatar von Furqan Rahamath
Furqan Rahamath

Dies kann erreicht werden rein mit JavaScript.

Ich sehe, dass die Antwort, die ich schreiben wollte, von Lynx in den Kommentaren zur Frage beantwortet wurde.

Aber ich werde trotzdem eine Antwort schreiben, denn genau wie ich vergessen die Leute manchmal, die Kommentare zu lesen.

Wenn Sie also nur den Abstand eines Elements (in Pixel) vom oberen Rand Ihres Bildschirmfensters ermitteln möchten, müssen Sie Folgendes tun:

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

verwenden getBoundingClientRect()

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

Das ist es!

Hoffe das hilft jemandem 🙂

  • getBoundingClient() funktioniert nicht, stattdessen .getBoundingClientRect()

    – Elnoor

    22. Mai 2018 um 21:09

  • Einfach tolle Arbeit @MohammedFurqanRahamathM. Vielen Dank für deine Antwort 🙂 Es funktioniert wie ein Zauber!! 🙂 🙂

    – KodeFor.Me

    18. Juli 2018 um 10:43

  • @MerianosNikos Danke. Ich bin froh, dass es geholfen hat 🙂

    – Furqan Rahamath

    20. Juli 2018 um 7:32 Uhr

  • Aber das würde nur funktionieren, wenn Sie nicht in der Mitte der Seite neu geladen haben, oder?

    – Sagiv

    14. Juli 2019 um 14:42 Uhr

  • @SagiveSEO Ich habe es nicht verstanden. Könnten Sie bitte Ihre Frage näher erläutern?

    – Furqan Rahamath

    15. Juli 2019 um 6:46

T.Toduas Benutzeravatar
T.Todua

Ich habe Folgendes verwendet:

                              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

Code:

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

Moutasim Ahmads Benutzeravatar
Moutasim Ahmad

Ich habe diese Funktion verwendet, um zu erkennen, ob das Element im Ansichtsfenster sichtbar ist.

Code:

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');
    }
});

  • Wie beantwortet das die Frage?

    – Peter Mortensen

    2. Mai um 16:25 Uhr

  • Wie beantwortet das die Frage?

    – Peter Mortensen

    2. Mai um 16:25 Uhr

1454340cookie-checkBestimmen Sie mit JavaScript den Abstand vom oberen Rand eines „Div“ zum oberen Rand des Fensters

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy