Событие прокрутки jQuery запускается дважды

0

Я работаю над созданием бесконечной функции прокрутки для страницы, и я $( window).scroll() с проблемой, когда кажется, что функция $( window).scroll() дважды. Я видел похожие вопросы в stackoverflow, но они, похоже, связаны с быстрыми прокрутками и не имеют возможности проверить погоду, запрос уже отправлен. Вот код, с которым я сейчас работаю, я полагаю, что его что-то легкое, что я здесь отсутствует.

var loading = false;
var scrollcount = 0;

$( window ).scroll( function(){
    scrollcount++;
    var scrolling = $( document ).scrollTop();
    var position = $( "#ajax-load" ).offset();
    if( scrolling + $( window ).height() > position.top - 200 && loading == false ){
        console.log( loading ); //returns 2 falses
        console.log( scrollcount ); //returns 2 of the same number
        console.log( $( document ).scrollTop() ); //returns same number
        loading = true;
        $( "#ajax-load" ).css( "display", "block" );
        $.get( "url/to/my/script", info )
        .done( function( data ){
            //here where the items are appended to the document
            setTimeout( function(){
                loading = false;
            }, 5000 );
        });
    }
});

Лицо, что, когда я выхожу из переменной scrollcount и возвращаюсь из scrollTop(), я получаю тот же номер дважды, кажется, говорит мне, что событие действительно срабатывает дважды в то же время по какой-то причине. Кажется, что если бы он стрелял дважды, один за другим, то для переменной загрузки была бы установлена ложь, а не огонь второй раз. Как я уже сказал, я думаю, что это нечто простое, что мне не хватает. Спасибо за вашу помощь!

  • 0
    Вы можете сделать jsfiddle?
  • 0
    Я только что сделал скрипку и, к сожалению, не получаю таких же результатов, как на сайте. Я буду продолжать пытаться выяснить, смогу ли я воспроизвести проблему в другом месте.
Теги:
infinite-scroll

2 ответа

5

Мое первое предположение: у вас есть приемник событий, применяемый дважды, где бы он ни находился.

Попробуйте добавить $ (window).unbind('scroll'); перед $ (window).scroll

Переменная загрузки будет ложной, если она срабатывает дважды, потому что false установлен в таймаут после асинхронного вызова

  • 0
    Это работает как шарм. Я потратил около 4 часов, пытаясь решить проблему. Благодаря тонну.
1
var timeout;

$(window).scroll(function() {
    clearTimeout(timeout);  
    timeout = setTimeout(function() {
        // do your stuff
    }, 50);
});

Используйте этот код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню