Cómo detectar la posición de desplazamiento de la página usando jQuery


183

Tengo problemas con la funcionalidad de jQuery en mi sitio web. Lo que hace es usar la window.scroll() función para reconocer cuándo la ventana cambia su posición de desplazamiento y en el cambio llama a algunas funciones para cargar datos desde el servidor.

El problema es .scroll()que se llama a la función apenas hay un pequeño cambio en la posición de desplazamiento y carga los datos en la parte inferior; sin embargo, lo que deseo lograr es cargar nuevos datos cuando la posición de desplazamiento / página llegue a la parte inferior, como sucede con el feed de Facebook.

Pero no estoy seguro de cómo detectar la posición de desplazamiento con jQuery?

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

$(window).scroll(function () {
    getData();
});

Respuestas:


322

Puede extraer la posición de desplazamiento utilizando el .scrollTop()método de jQuery

$(window).scroll(function (event) {
    var scroll = $(window).scrollTop();
    // Do something
});

9
Adjuntar eventos al desplazamiento de la ventana es una mala idea: consulte stackoverflow.com/questions/5036850/…
hendr1x

13
Escuchar el desplazamiento de la ventana no es malo en sí mismo. Es cuando la gente intenta hacer cosas en cada disparo de ese evento que ocurre un problema. Si solo hace algo como establecer el valor de una variable en la posición de desplazamiento actual, o en verdadero / falso, y luego hace uso de aquellos fuera del evento, generalmente debería ser dorado.
Jesse Dupuy

77
Debe considerar eliminar el rebote cuando trabaje con este tipo de eventos. Ver davidwalsh.name/javascript-debounce-function
caroso1222

Como ya tiene la eventfunción de argumento, puede obtener los mismos datos deevent.originalEvent.pageY;
Antoniossss el

119

Estás buscando la window.scrollTop()función.

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

    if(height  > some_number) {
        // do something
    }
});

36

Consulte aquí 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();
   }
});

6
$(window).scroll( function() { 
 var scrolled_val = $(document).scrollTop().valueOf();
 alert(scrolled_val+ ' = scroll value');
});

Esta es otra forma de obtener el valor de desplazamiento.


4

Ahora eso funciona para mí ...

$(document).ready(function(){

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

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

})

funciona bien ... y luego puede usar JQuery / TweenMax para rastrear elementos y controlarlos.


55
Por favor, evite insultos y malas palabras. Lee el centro de ayuda .
Kyll

2

Almacene el valor del desplazamiento como cambios en HiddenField cuando alrededor del PostBack recupera el valor y agrega el desplazamiento.

//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" />

0

Puede agregar todas las páginas con este código:

Código 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 */

CÓDIGO 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;
}

0
$('.div').scroll(function (event) {
 event.preventDefault()
 var scroll = $(this).scrollTop();
 if(scroll == 0){
   alert(123)
 }
});

Este código para chat_boxes para cargar mensajes anteriores


0

OBTENER Posición de desplazamiento:

var scrolled_val = window.scrollY;

DETECTAR Posición de desplazamiento:

$(window).scroll
(
     function (event) 
     {
          var scrolled_val = window.scrollY;
          alert(scrolled_val);
     }
 );
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.