Obtenir la hauteur visible d'un div avec jQuery

J'ai besoin de récupérer la hauteur visible d'une div à l'intérieur d'une zone déroulante. Je me considère assez décent avec jQuery, mais ce n'est absolument me jetant hors.

Disons que j'ai une div rouge à l'intérieur d'un noir wrapper:

Obtenir la hauteur visible d'un div avec jQuery

Dans le graphique ci-dessus, la fonction jQuery serait de retour 248, la partie visible de la div.

Obtenir la hauteur visible d'un div avec jQuery

Une fois que l'utilisateur fait défiler au dessus de la div, comme dans le graphique ci-dessus, il ferait rapport 296.

Obtenir la hauteur visible d'un div avec jQuery

Maintenant, une fois que l'utilisateur est déjà passé de la div, il serait à nouveau rapport 248.

Évidemment, mes chiffres ne vont pas être aussi cohérente et claire comme ils sont dans cette démo, ou je venais de coder en dur pour ces chiffres.

J'ai un peu de théorie:

  • Obtenir la hauteur de la fenêtre
  • Obtenir la hauteur de la div
  • Obtenir le décalage initial de la div du haut de la fenêtre
  • Obtenir le décalage que l'utilisateur fait défiler.
    • Si le décalage est positif, cela signifie que le haut de la div est toujours visible.
    • si elle est négative, le haut de la div a été éclipsée par la fenêtre. À ce stade, la div pourrait être de prendre toute la hauteur de la fenêtre, ou le bas de la div pourrait montrer
    • Si le bas de la div est de montrer, à comprendre le fossé entre elle et le bas de la fenêtre.

Il semble assez simple, mais j'ai juste ne peut pas envelopper la tête autour de lui. Je vais prendre une autre fissure demain matin; j'ai juste pensé que certains d'entre vous génies pourriez être en mesure de vous aider.

Merci!

Mise à JOUR: j'ai compris cela sur mon propre, mais ressemble à l'une des réponses ci-dessous est plus élégant, de sorte que je vais utiliser à la place. Pour les curieux, voici ce que je suis venu avec:

$(document).ready(function() {
    var windowHeight = $(window).height();
    var overviewHeight = $("#overview").height();
    var overviewStaticTop = $("#overview").offset().top;
    var overviewScrollTop = overviewStaticTop - $(window).scrollTop();
    var overviewStaticBottom = overviewStaticTop + $("#overview").height();
    var overviewScrollBottom = windowHeight - (overviewStaticBottom - $(window).scrollTop());
    var visibleArea;
    if ((overviewHeight + overviewScrollTop) < windowHeight) {
        //alert("bottom is showing!");
        visibleArea = windowHeight - overviewScrollBottom;
        //alert(visibleArea);
    } else {
        if (overviewScrollTop < 0) {
            //alert("is full height");
            visibleArea = windowHeight;
            //alert(visibleArea);
        } else {
            //alert("top is showing");
            visibleArea = windowHeight - overviewScrollTop;
            //alert(visibleArea);
        }
    }
});
  • Je veux le regarder dans vh unités. 1vh = 1/100ème de la fenêtre d'affichage de la hauteur. Vous trouverez probablement une solution à cela. Trouver la hauteur de la fenêtre d'affichage, la hauteur de l'élément, la position des éléments, et la position de défilement et de calculer en conséquence.
  • En supposant qu'il existe de la marge à l'intérieur de la DIV, dire "10px" tout autour. Je détecte la hauteur de défilement pour voir si c'est passé "10", alors je voudrais juste avoir la hauteur de l'élément parent, soustraire basé sur le défilement de la hauteur.
  • Si tout le reste échoue, je suis tombé sur ce script qui ressemble, il peut servir le but, vous avez besoin de: larsjung.de/fracs
InformationsquelleAutor JacobTheDev | 2014-07-15