Як визначити позицію прокрутки сторінки за допомогою jQuery


182

У мене виникають проблеми з функціоналом jQuery на моєму веб-сайті. Що він робить, це те, що він використовує window.scroll() функцію розпізнавання, коли вікно змінює своє місце прокрутки і при зміні викликає кілька функцій для завантаження даних із сервера.

Проблема полягає в тому, що .scroll()функція викликається, як тільки є незначна зміна положення прокрутки і завантажується дані внизу; однак я хочу досягти завантаження нових даних, коли позиція прокрутки / сторінки досягає нижньої частини, як це відбувається у стрічці Facebook.

Але я не впевнений, як виявити позицію прокрутки за допомогою jQuery?

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

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

Чи відповідає це на ваше запитання? Як виявити напрямок прокрутки
Aryan Beezadhur

Відповіді:


320

Ви можете отримати місце прокрутки, використовуючи .scrollTop()метод jQuery

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

8
Прикріплення подій у вікні прокручування є поганою ідеєю: см stackoverflow.com/questions/5036850 / ...
hendr1x

12
Прослуховування прокрутки вікон не є само по собі. Саме тоді, коли люди намагаються робити щось на кожному вогні цієї події, виникають неприємності. Якщо ви робите лише щось на зразок встановлення значення змінної на поточну позицію прокрутки, або на true / false, а потім використовуєте ті, що знаходяться поза подією, зазвичай ви повинні бути золотими.
Джессі Дюпюй

6
Ви повинні розглянути можливість дебютації під час роботи з подібними подіями. Дивіться davidwalsh.name/javascript-debounce-function
caroso1222

Оскільки ви вже працюєте eventв якості аргументу, ви можете отримати ті самі дані відevent.originalEvent.pageY;
Antoniossss

119

Ви шукаєте window.scrollTop()функцію.

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

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

36

Перевірте тут 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');
});

Це ще один спосіб отримання значення прокрутки.


4

Тепер це працює для мене ...

$(document).ready(function(){

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

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

})

він працює добре ... і тоді ви можете використовувати JQuery / TweenMax для відстеження елементів та управління ними.


5
Будь-ласка, уникайте неприємностей і поганих слів. Прочитайте довідковий центр .
Kyll

2

Збережіть значення прокрутки як зміни в HiddenField, коли навколо PostBack отримує значення та додає прокрутку.

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

Ви можете додати всі сторінки за допомогою цього коду:

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

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)
 }
});

Цей код для чатових ящиків для завантаження попередніх повідомлень


0

Отримати позицію прокрутки:

var scroll_val = window.scrollY;

ВИЗНАЧИТИ Положення прокрутки:

$(window).scroll
(
     function (event) 
     {
          var scrolled_val = window.scrollY;
          alert(scrolled_val);
     }
 );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.