1378 Stimmen

Wie kann man prüfen, ob ein Element nach dem Scrollen sichtbar ist?

Ich lade Elemente über AJAX. Einige von ihnen sind nur sichtbar, wenn Sie die Seite nach unten scrollen. Gibt es eine Möglichkeit, wie ich wissen kann, ob ein Element jetzt im sichtbaren Teil der Seite ist?

0 Stimmen

Ich verstehe das Problem nicht wirklich. Könnten Sie versuchen, mehr Informationen hinzuzufügen?

61 Stimmen

Bedeutet, dass er eine Methode haben möchte, um zu wissen, ob ein bestimmtes Element im Browserfenster angezeigt wird oder ob der Benutzer scrollen muss, um es zu sehen.

1 Stimmen

Um zu prüfen, ob ein Element in einem Container vollständig sichtbar ist, fügen Sie einfach einen zusätzlichen Selektor-Parameter hinzu und verwenden Sie den Code von elem dafür wieder. Library.IsElementVisibleInContainer = function (elementSelector, containerSelector) { var containerViewTop = $(containerSelector).offset().top; var containerViewBottom = containerViewTop + $(containerSelector).height();

62voto

Denis Matafonov Punkte 2478

Einfacher Vanilla, um zu prüfen, ob das Element ( el ) ist in einem scrollbaren Div sichtbar ( holder )

function isElementVisible (el, holder) {
  holder = holder || document.body
  const { top, bottom, height } = el.getBoundingClientRect()
  const holderRect = holder.getBoundingClientRect()

  return top <= holderRect.top
    ? holderRect.top - top <= height
    : bottom - holderRect.bottom <= height
}

Verwendung mit jQuery:

var el = $('tr:last').get(0);
var holder = $('table').get(0);
var isVisible = isScrolledIntoView(el, holder);

9 Stimmen

In dieser Ära der Single Page Applications ist es üblich geworden, zu prüfen, ob ein Element innerhalb eines anderen Elements sichtbar ist, außer Fenster . Deshalb bekomme ich für diesen Artikel eine positive Bewertung.

2 Stimmen

HINWEIS: Wenn Sie diese Rückgabe auf der Grundlage eines Teils des Elements nicht sichtbar ist (wie in meinem Fall), entfernen Sie die Höhe Variable aus der Funktion und ändern Sie die Orte, die es verwendet wird, um nur 0 (Null). Dann, wenn Sie nur "Teil" des Elements versteckt haben, wird es false zurückgeben.

0 Stimmen

Warum ist der Name Ihrer Funktion in der jQuery-Anwendung anders?

41voto

Fedir RYKHTIK Punkte 9464

JQuery Waypoints Plugin geht hier sehr gut.

$('.entry').waypoint(function() {
   alert('You have scrolled to an entry.');
});

Es gibt einige Beispiele auf der Website Seite des Plugins .

3 Stimmen

Bei mir hat es nur mit einem Offset funktioniert $('#my-div').waypoint(function() { console.log('Hello there!'); }, { offset: '100%' });

25voto

webicy Punkte 1555

Wie wäre es mit

function isInView(elem){
   return $(elem).offset().top - $(window).scrollTop() < $(elem).height() ;
}

Danach können Sie auslösen, was Sie wollen, sobald das Element in der Ansicht ist, wie folgt

$(window).scroll(function(){
   if (isInView($('.classOfDivToCheck')))
      //fire whatever you what 
      dothis();
})

Das funktioniert bei mir sehr gut.

16voto

Snigdha Batra Punkte 827

Ich habe Scott Dowdings coole Funktion für meine Anforderungen abgeändert. Diese Funktion wird verwendet, um herauszufinden, ob das Element gerade in den Bildschirm gescrollt wurde, d.h. ob es am oberen Rand liegt.

function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();
    var elemTop = $(elem).offset().top;
    return ((elemTop <= docViewBottom) && (elemTop >= docViewTop));
}

15voto

Sampson Punkte 258265

WebResourcesDepot schrieb ein Skript, das beim Scrollen geladen wird die die jQuery vor einiger Zeit. Sie können sich ihre Live-Demo hier . Der Grund für ihre Funktionalität war folgender:

$(window).scroll(function(){
  if  ($(window).scrollTop() == $(document).height() - $(window).height()){
    lastAddedLiveFunc();
  }
});

function lastAddedLiveFunc() { 
  $('div#lastPostsLoader').html('<img src="images/bigLoader.gif">');
  $.post("default.asp?action=getLastPosts&lastPostID="+$(".wrdLatest:last").attr("id"),
    function(data){
        if (data != "") {
          $(".wrdLatest:last").after(data);         
        }
      $('div#lastPostsLoader').empty();
    });
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X