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:
Dans le graphique ci-dessus, la fonction jQuery serait de retour 248, la partie visible de la div.
Une fois que l'utilisateur fait défiler au dessus de la div, comme dans le graphique ci-dessus, il ferait rapport 296.
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
Vous devez vous connecter pour publier un commentaire.
Ici est un moyen rapide et sale concept. Essentiellement, il compare les
offset().top
de l'élément en haut de la fenêtre, et leoffset().top + height()
au bas de la fenêtre:Exemple de violon
modifier - petite mise à jour à effectuer la logique lorsque la fenêtre est redimensionnée.
div
s sans répéter le code. Est-il un moyen de faire cela?Calculer la quantité de px un élément (hauteur) est dans la fenêtre d'affichage
Violon démo
Ce petit fonction sera de retour le montant de
px
un élément est visible dans le (vertical) Fenêtre d'affichage:À utiliser comme:
que c'est.
jQuery
.inViewport()
PluginjsFiddle démo
de la ci-dessus, vous pouvez extrait la logique et de créer un plugin comme celui-ci:
À utiliser comme:
votre sélecteurs de façon dynamique écouter de la fenêtre
scroll
etresize
mais aussi revenir à la valeur initiale sur les DOM prêt creux de la première fonction de rappel argumentpx
.<meta name="viewport" content="width=your_size">
en tête de section de html.content="width=1259"
peut convenir à la majorité. Avez-vous essayécontent="width=device-width, initial-scale=1"
à la place?<meta name="viewport" content="your_content">
déclaration 🙂visible height px
, comme un objet. Voir ce violon pour une telle idée: jsfiddle.net/RokoCB/6xjq5gyy (open developer console pour voir les logs)(b<H?b:H)
vous pourriez avoir écritMath.min(b, H)
Ici est une version de Rory de l'approche ci-dessus, à l'exception écrit pour fonctionner comme un plugin jQuery. Il peut avoir plus d'une application générale dans ce format. Super réponse, Rory - merci!
Peut être appelé par le suivant:
jsFiddle