jQuery бесконечная прокрутка заставляет ссылки временно не работать? - PullRequest
3 голосов
/ 26 ноября 2011

Пару недель назад я реализовал бесконечную прокрутку страницы с помощью jquery.Сама прокрутка работает отлично, но я получаю очень странный побочный эффект.

Когда я прокручиваю и загружаю новый контент, ни одна из ссылок не работает в течение первых нескольких секунд.Фактически, никакие ссылки нигде на странице не работают в течение пары секунд.И, кажется, становится еще хуже, если я прокручиваю действительно очень далеко, например, загружаю 5 страниц с быстрой последовательностью - тогда мне придется подождать 20 секунд, прежде чем любая из ссылок в любой части страницы станет кликабельной.

IУ меня такой же опыт использования Firefox или IE8, так что я предполагаю, что это не браузер.

Есть идеи, что является причиной или исправлением?

1 Ответ

0 голосов
/ 19 января 2012

Все еще есть эта проблема?

Вопросы:

  • Через 20 секунд после загрузки страницы ссылки кликабельны? Браузер "завис" на 20 секунд или это просто ссылки, по которым нельзя кликнуть?
  • Чтобы загрузить больше контента, это ссылка с надписью «показать больше» или контент автоматически загружается, когда пользователь попадает в конец страницы?
  • Используете ли вы jQuery .scroll () для обновления содержимого?

Исходные мысли:

  • Используете ли вы .click () или .bind ('click', function ) для ссылок, по которым нельзя кликать? Попробуйте вместо этого .live ('click', function ).
  • Попробуйте использовать setTimeout. Для некоторых браузеров jQuery .scroll вызывает функцию-обработчик каждый пиксель полосы прокрутки изменяется ... не один раз, когда выполняется прокрутка, что может вызвать перегрузку вызова функции. Попробуйте что-то вроде этого сделать, чтобы он не выполнял 1000 вызовов функций при прокрутке (это всего лишь быстрый пример ... код может быть лучше):

    <script type="text/javascript">
        var scrolling = false;
        $(document).scroll('setScroll');
    
        function setScroll() {
            scrolling = setTimeout(doScrollUpdate, 300);
        }
    
        function doScrollUpdate() {
            clearTimeout(scrolling);
            // Do your ajax stuff here
        }
    </script>
    
...