Бесконечная прокрутка jQuery заставляет ссылки временно не работать?

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

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

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

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


person Jason Gerstein    schedule 26.11.2011    source источник


Ответы (1)


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

Вопросы:

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

Первоначальные мысли:

  • Используете ли вы .click() или .bind('click', функция) для ссылок, на которые нельзя нажать? Вместо этого попробуйте .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>
    
person iDev247    schedule 19.01.2012