Изменить автоматическую загрузку при логике прокрутки (запретить пользователю ждать) - PullRequest
1 голос
/ 30 сентября 2010

В настоящее время я использую следующую логику для автоматической загрузки новых сообщений из базы данных, когда пользователь достигает нижней части сайта:

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

Достаточно справедливо. Он делает то, что должен, но я хотел бы изменить это, чтобы он начал загружать новые сообщения, когда пользователь, например, 100 пикселей снизу сайта. Есть идеи? Когда я попытался изменить код, я либо:

** ввел почти бесконечный цикл вызовов last_msg_function (), потому что оператор if () соответствует, например, от 100 пикселей снизу и для каждого пикселя до 0 пикселей при прокрутке. Поэтому, если вы прокручиваете очень медленно, вам, возможно, удастся остановиться ровно на 100 пикселях снизу, но в реальной жизни это не сработает.

**) он должен точно соответствовать пикселям снизу, которые я определяю, например, 90 пикселей. Если вы остановите прокрутку, например, 89 или 91 пиксель, ничего не загружается.

Итак, что я должен изменить, чтобы убедиться, что он начинает загружаться, когда вы находитесь на 0 -> 100 пикселей от нижней части сайта, но в то же время не отправлять новый запрос каждый раз, чтобы изменить положение прокрутки несколько пикселей в любом направлении во время загрузки?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Хороший ответ, Ник.Еще одна вещь, которую нужно сделать, - убедиться, что ваша функция прокрутки срабатывает только один раз каждый раз, когда вы прокручиваете пользователя, иначе, как вы упоминали, функция last_msg_function будет вызываться несколько раз.Попробуйте что-то вроде этого ...

var processScroll = true;
$(window).scroll(function() {
    if (processScroll  && $(window).scrollTop() > $(document).height() - $(window).height() - 100) {
        processScroll = false;
        last_msg_funtion();
        processScroll = true;
    }
});
1 голос
/ 30 сентября 2010

Вы можете просто немного изменить чек, например:

$(window).scroll(function() {
 if ($(window).scrollTop() > ($(document).height() - $(window).height() - 100)) {
  last_msg_funtion();
 }
});

Вы можете попробовать здесь . Это проверяет, что позиция прокрутки составляет 0-100px от фактического дна ... вы можете убедиться, что last_msg_function() ничего не делает, если он уже загружается (вы должны сделать это в любом случае) но кроме этого, if() - единственное необходимое изменение.

...