Cela devrait faire l'affaire :
function isScrolledIntoView(elem)
{
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
Fonction utilitaire simple Cela vous permettra d'appeler une fonction utilitaire qui accepte l'élément que vous recherchez et si vous voulez que l'élément soit entièrement visible ou partiellement.
function Utils() {
}
Utils.prototype = {
constructor: Utils,
isElementInView: function (element, fullyInView) {
var pageTop = $(window).scrollTop();
var pageBottom = pageTop + $(window).height();
var elementTop = $(element).offset().top;
var elementBottom = elementTop + $(element).height();
if (fullyInView === true) {
return ((pageTop < elementTop) && (pageBottom > elementBottom));
} else {
return ((elementTop <= pageBottom) && (elementBottom >= pageTop));
}
}
};
var Utils = new Utils();
Utilisation
var isElementInView = Utils.isElementInView($('#flyout-left-container'), false);
if (isElementInView) {
console.log('à la vue');
} else {
console.log('hors de la vue');
}
0 votes
Je ne comprends pas vraiment le problème. Pourrais-tu essayer d'ajouter plus d'informations?
58 votes
Il signifie qu'il veut une méthode pour savoir si un élément donné est affiché dans la fenêtre du navigateur, ou si l'utilisateur doit faire défiler pour le voir.
1 votes
Pour vérifier si un élément est entièrement visible dans un conteneur, il suffit d'ajouter un paramètre de sélecteur supplémentaire et de réutiliser le code d'élément pour celui-ci.
Library.IsElementVisibleInContainer = function (elementSelector, containerSelector) { var containerViewTop = $(containerSelector).offset().top; var containerViewBottom = containerViewTop + $(containerSelector).height();
0 votes
Qu'est-ce que serait cette "Bibliothèque" @Lindsay ?
4 votes
Possible duplicate of Comment savoir si un élément du DOM est visible dans le viewport actuel?
0 votes
La bibliothèque est juste une fonction que j'ai créée. Par exemple,
function Library() { }
. J'écris mon javascript de cette manière car je trouve cela plus facile à lire/maintenir comparé au simple fait d'avoir une fonction (par exemple IsElementVisibleInContainer) sans savoir d'où elle provient.0 votes
Intersection observer sera la réponse... mais pas encore sauf si vous utilisez un polyfill pour Safari et IE. Observer est une nouvelle version de l'événement. Ceci déclenchera un rappel quand nn% de l'élément est visible. Voir developer.mozilla.org/fr/docs/Web/API/…
1 votes
Possible duplicate de Comment savoir si un élément du DOM est visible dans le viewport actuel ?
4 votes
Toutes les réponses déclencheront un reflow, donc cela pourrait être un goulot d'étranglement; vous devriez utiliser IntersectionObserver s'il est pris en charge. Cela offrira de meilleures performances sur les navigateurs modernes.
0 votes
La solution non parfaite prête est ici : github.com/proxy-m/real-visibility
0 votes
Utilisez l'API Intersection Observer pour détecter si un élément est dans le viewport, détails ici - frontendguruji.com/blog/…