Создание пользовательской коляски JQuery Infinitical, как включить и выключить прокрутку после отправки запроса? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу иметь возможность включить $(document).on('scroll', function() {...});, когда я отключаю его с помощью $(document).off('scroll');

Мой код до сих пор я пытался использовать функцию debounce, но я получаю

незаконный вызов

function scroller(lang, type, genre, sort, page) {
    console.log($(this).scrollTop() * 2, $('#pages').position().top);
    if ($(this).scrollTop() * 2 >= $('#pages').position().top) {
        $.post('<?= (new UrlLibry)->SetUrl('bookshop', 'jajax', 'page'); ?>', {lang: lang, type: type, genre: genre, sort: sort, pages: page}, function(data) {
            $('#loadmore').append(data);
            page++;
            $('#pageNumber').data('page', page);
        });
    }
}

var debouncedMouseMove = debounce(scroller, 50);
$(document).on('scroll', debouncedMouseMove);

1 Ответ

1 голос
/ 19 июня 2019

Вы можете отделить функцию-обработчик от вызова .on () .

Более того, если вы замените все с помощью функции debounce, вам необходимо продолжить учитывать, что у функции должен быть только один аргумент: событие.

Я использовал debounce , содержащуюся в функциибиблиотека underscorejs.

function scroller(event) {
  console.log('called...');
  return;

    var lang, type, genre, sort, page; // cannot pass as argument
    console.log($(this).scrollTop() * 2, $('#pages').position().top);
    if ($(this).scrollTop() * 2 >= $('#pages').position().top) {
        $.post("<?= (new UrlLibry)->SetUrl('bookshop', 'jajax', 'page'); ?>",
                {lang: lang, type: type, genre: genre, sort: sort, pages: page}, function(data) {
            $('#loadmore').append(data);
            page++;
            $('#pageNumber').data('page', page);
        });
    }
}

var debouncedMouseMove = _.debounce(scroller, 50);
$(document).on('scroll', debouncedMouseMove);
body {
    height: 400vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
...