Jak wykryć pozycję przewijania strony za pomocą jQuery

182

Mam problem z funkcjonalnością jQuery na mojej stronie. To, co robi, polega na tym, że używa window.scroll() funkcji do rozpoznawania, kiedy okno zmienia swoją pozycję przewijania, a przy zmianie wywołuje kilka funkcji w celu załadowania danych z serwera.

Problem polega na tym, że .scroll()funkcja jest wywoływana, gdy tylko nastąpi niewielka zmiana pozycji przewijania i ładuje dane na dole; chcę jednak załadować nowe dane, gdy pozycja przewijania / strony dojdzie do dołu, tak jak dzieje się to w przypadku kanału na Facebooku.

Ale nie jestem pewien, jak wykryć pozycję przewijania za pomocą jQuery?

function getData() {
  $.getJSON('Get/GetData?no=1', function (responseText) {
    //Load some data from the server
  })
};

$(window).scroll(function () {
    getData();
});
Maven
źródło
Czy to odpowiada na twoje pytanie? Jak wykryć kierunek przewijania
Aryan Beezadhur

Odpowiedzi:

320

Możesz wyodrębnić pozycję przewijania za pomocą .scrollTop()metody jQuery

$(window).scroll(function (event) {
    var scroll = $(window).scrollTop();
    // Do something
});
Konstantin Dinev
źródło
8
Dołączanie zdarzeń do przewijania okna to zły pomysł: patrz stackoverflow.com/questions/5036850/...
hendr1x
12
Słuchanie przewijania okna nie jest samo w sobie złe. Problem pojawia się , gdy ludzie próbują robić rzeczy przy każdym uruchomieniu tego zdarzenia. Jeśli robisz tylko coś takiego, jak ustawienie wartości zmiennej na bieżącą pozycję przewijania lub na wartość prawda / fałsz, a następnie skorzystanie z tych poza zdarzeniem, powinieneś ogólnie być złoty.
Jesse Dupuy
6
Podczas pracy z tego rodzaju wydarzeniami należy rozważyć ogłoszenie. Zobacz davidwalsh.name/javascript-debounce-function
caroso1222,
Ponieważ masz już eventfunkcję argumentu, możesz uzyskać te same dane zevent.originalEvent.pageY;
Antoniossss,
119

Szukasz window.scrollTop()funkcji.

$(window).scroll(function() {
    var height = $(window).scrollTop();

    if(height  > some_number) {
        // do something
    }
});
David Freitag
źródło
36

Sprawdź tutaj DEMO http://jsfiddle.net/yeyene/Uhm2J/

function getData() {
    $.getJSON('Get/GetData?no=1', function (responseText) {
        //Load some data from the server
    })
};

$(window).scroll(function() {
   if($(window).scrollTop() + $(window).height() == $(document).height()) {
       alert("bottom!");
       // getData();
   }
});
Yeyene
źródło
6
$(window).scroll( function() { 
 var scrolled_val = $(document).scrollTop().valueOf();
 alert(scrolled_val+ ' = scroll value');
});

To kolejny sposób na uzyskanie wartości przewijania.

sejf008
źródło
4

Teraz to działa dla mnie ...

$(document).ready(function(){

    $(window).resize(function(e){
        console.log(e);                   
    });

    $(window).scroll(function (event) {
        var sc = $(window).scrollTop();
        console.log(sc);
    });

})

działa dobrze ... a następnie możesz użyć JQuery / TweenMax do śledzenia elementów i kontrolowania ich.

Ande Caleb
źródło
5
Absolutnie unikaj obelg i złych słów. Przeczytaj centrum pomocy .
Kyll
2

Przechowuj wartość przewijania jako zmiany w HiddenField, gdy wokół PostBack pobiera wartość i dodaje zwój.

//jQuery

jQuery(document).ready(function () {

    $(window).scrollTop($("#<%=hidScroll.ClientID %>").val());

    $(window).scroll(function (event) {
        $("#<%=hidScroll.ClientID %>").val($(window).scrollTop());
    });
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function () {

    $(window).scrollTop($("#<%=hidScroll.ClientID %>").val());

    $(window).scroll(function (event) {
        $("#<%=hidScroll.ClientID %>").val($(window).scrollTop());
    });
});

//Page Asp.Net
<asp:HiddenField ID="hidScroll" runat="server" Value="0" />
Mauricio Ferraz
źródło
0

Możesz dodać wszystkie strony za pomocą tego kodu:

Kod JS:

 /* Top btn */
    $(window).scroll(function() {
        if ($(this).scrollTop()) {
            $('#toTop').fadeIn();
        } else {
            $('#toTop').fadeOut();
        }
    });
    var top_btn_html="<topbtn id='toTop' onclick='gotoTop()'>&#8593;</topbtn>";
    $('document').ready(function(){
        $("body").append(top_btn_html);
    });
    function gotoTop(){
        $("html, body").animate({scrollTop: 0}, 500);    
    }
    /* Top btn */

KOD CSS

/*Scrool top btn*/
#toTop{
    position: fixed;
    z-index: 10000;
    opacity: 0.5;
    right: 5px;
    bottom: 10px;
    background-color: #ccc;
    border: 1px solid black;
    width: 40px;
    height: 40px;
    border-radius: 20px;
    color: black;
    font-size: 22px;
    font-weight: bolder;
    text-align: center;
    vertical-align: middle;
}
Ferhat KOÇER
źródło
0
$('.div').scroll(function (event) {
 event.preventDefault()
 var scroll = $(this).scrollTop();
 if(scroll == 0){
   alert(123)
 }
});

Ten kod do chat_boxów do ładowania poprzednich wiadomości

RinShan Kolayil
źródło
0

POBIERZ Przewiń pozycję:

var scrolled_val = window.scrollY;

DETECT Przewiń pozycję:

$(window).scroll
(
     function (event) 
     {
          var scrolled_val = window.scrollY;
          alert(scrolled_val);
     }
 );
Hassaan Raza
źródło