Предотвратить jquery получить и добавить дубликаты данных, когда полоса прокрутки слишком долго остается в нижней части div? - PullRequest
1 голос
/ 27 мая 2011

У меня есть div, когда пользователь прокручивает до конца div, jquery получит больше данных с другой страницы и добавит их в div.Моя проблема в том, что иногда полоса прокрутки остается в нижней части div слишком долго, поэтому она выполняет оператор jquery несколько раз.Jquery получить и добавить дубликаты данных в DIV.Как предотвратить получение и добавление дублирующихся данных в jquery, если полоса прокрутки слишком долго остается внизу div?Мои коды:

function scrollalert(){
    var elements = $(".messagepiecetime");
    var lastmsgid = elements.eq(elements.length - 1).attr('id');        
    var scrolltop=$('#scrollbox').attr('scrollTop');
    var scrollheight=$('#scrollbox').attr('scrollHeight');
    var windowheight=$('#scrollbox').attr('clientHeight');
    var scrolloffset=20;
    if(scrolltop>=(scrollheight-(windowheight+scrolloffset)))
    {   
        $.get('test7a.php?lastmsgID=' + lastmsgid, '', function(newitems){
            $('#content').append(newitems);                             
        }); 
    }
    setTimeout('scrollalert();', 1000);
}

setTimeout('scrollalert();', 1000);// Вот где проблема возникает.Проблема исправлена, если я установил ее на 3000 миллисекунд.Вывод будет 8 дублированных данных, если я установлю его на 1 миллисекунду.Я знаю, что установка 3 тыс. Миллисекунд может решить эту проблему, но я не хочу, чтобы пользователи ждали 3 секунды, чтобы получить новые данные при каждой прокрутке вниз.Есть ли другой способ исправить это, не используя setTimeout 3 секунды?

1 Ответ

2 голосов
/ 27 мая 2011

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

var loadMore = true;

function scrollalert() {
    var elements = $(".messagepiecetime");
    var lastmsgid = elements.eq(elements.length - 1).attr('id');
    var scrolltop = $('#scrollbox').attr('scrollTop');
    var scrollheight = $('#scrollbox').attr('scrollHeight');
    var windowheight = $('#scrollbox').attr('clientHeight');
    var scrolloffset = 20;
    if ((scrolltop >= (scrollheight - (windowheight + scrolloffset))) && loadMore) {
        loadMore = false;
        $.get('test7a.php?lastmsgID=' + lastmsgid, '', function(newitems) {
            $('#content').append(newitems);
            loadMore = true;
        });
    }
    setTimeout('scrollalert();', 1000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...