JQuery vérifier si l'élément est visible dans viewport [dupliquer]

cette question a déjà une réponse ici:

fonction pour vérifier si la classe div" media " est dans les navigateurs Visual viewport indépendamment de la position de défilement de la fenêtre.

<HTML>
<HEAD>
  <TITLE>My first HTML document</TITLE>
</HEAD>
<BODY>
  <div class="main">
   <div class="media"></div>
  </div>

</BODY>
</HTML>

essayer d'utiliser ce plugin https://github.com/customd/jquery-visible avec cette fonction mais Je ne sais pas comment le faire fonctionner.

$('#element').visible( true );
64
demandé sur Erenor Paz 2013-12-27 01:16:31

6 réponses

Comment avez-vous fait pour que ça marche? Selon la documentation pour ce plugin, .visible() renvoie un booléen indiquant si l'élément est visible. Donc vous l'utilisez comme ceci:

if ($('#element').visible(true)) {
    // The element is visible, do something
} else {
    // The element is NOT visible, do something else
}
44
répondu David 2017-12-04 11:49:55

vérifiez si l'élément est visible dans viewport sans plugin:

déterminer D'abord les positions supérieure et inférieure de l'élément. Déterminez ensuite la position du bas du viewport (par rapport au haut de votre page) en ajoutant la position de défilement à la hauteur du viewport.

si la position inférieure du viewport est supérieure à la position supérieure de l'élément et que la position supérieure du viewport est inférieure à celle de l'élément en bas, l'élément est dans le viewport (au moins partiellement). En termes plus simples, quand n'importe quelle partie de l'élément est entre les limites supérieures et inférieures de votre viewport, l'élément est visible sur votre écran.

Maintenant vous pouvez écrire une instruction si/else, où l'instruction si ne s'exécute que lorsque la condition ci-dessus est remplie.

le code ci-dessous exécute ce qui a été expliqué ci-dessus:

//this function runs every time you are scrolling

$(window).scroll(function() {
    var top_of_element = $("#element").offset().top;
    var bottom_of_element = $("#element").offset().top + $("#element").outerHeight();
    var bottom_of_screen = $(window).scrollTop() + window.innerHeight;
    var top_of_screen = $(window).scrollTop();

    if((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)){
        // The element is visible, do something
    }
    else {
        // The element is not visible, do something else
    }
});

Cette réponse est un résumé de ce qui Chris Bier et Andy discutaient ci-dessous. J'espère que cela aidera tous ceux qui rencontrent cette question en faisant des recherches comme je l'ai fait. J'ai également utilisé une réponse à la question suivante pour formuler ma réponse: afficher Div lorsque la position de défilement .

55
répondu ADB 2017-11-13 03:55:08

vous pouvez écrire une fonction jQuery comme celle-ci pour déterminer si un élément est dans le viewport.

Inclure ce quelque part après jQuery est inclus:

$.fn.isInViewport = function() {
    var elementTop = $(this).offset().top;
    var elementBottom = elementTop + $(this).outerHeight();

    var viewportTop = $(window).scrollTop();
    var viewportBottom = viewportTop + $(window).height();

    return elementBottom > viewportTop && elementTop < viewportBottom;
};

exemple d'utilisation:

$(window).on('resize scroll', function() {
    if ($('#Something').isInViewport()) {
        // do something
    } else {
        // do something else
    }
});

notez que cela ne vérifie que les positions supérieure et inférieure des éléments, il ne vérifie pas si un élément est à l'extérieur du viewport horizontalement.

45
répondu Tom Pažourek 2018-03-20 14:07:40

vous pouvez voir cet exemple .

// Is this element visible onscreen?
var visible = $(#element).visible( detectPartial );

detectPartial:

  • vrai : tout l'élément est visible
  • false : une partie de l'élément est visible

visible est une variable booléenne qui indique si l'élément est visible ou non.

3
répondu watou 2013-12-26 23:05:54
var visible = $(".media").visible();
0
répondu slvnperron 2013-12-26 21:30:57

Voici une façon de le faire sans un plugin:

obtenir D'abord la position de l'élément. Ensuite, ajoutez la position de défilement et la hauteur du viewport ensemble.

si la combinaison de la position de défilement et de la hauteur du viewport est supérieure ou égale à la position de l'élément, c'est dans le viewport.

var element_position = $("#element").offset().top;
var scroll_position = $(window).scrollTop();
var viewport_height = $(window).height();

if((scroll_position + viewport_height) > element_position){
    // Do something because the element is in the viewport
}
-4
répondu Chris Bier 2015-08-06 15:48:34