Эффект «бесконечной прокрутки» в таблице HTML

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

Пользователь может прокручивать вверх и вниз, поэтому мне нужно определить, когда пользователь достигает конца полосы прокрутки (то есть последняя строка внизу таблицы), чтобы запросить и показать больше данных.

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

Кстати, сейчас я использую YUI Datatable

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
0
11 131
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Я не знаком с конкретным элементом, который вы используете, но для того, чтобы чтобы реализовать это в полноразмерном окне, вы можете сделать следующее:

$wnd.onscroll = function() {
    if (($wnd.height - $wnd.scrollTop) < SOME_MARGIN) then doSomething();
};

Где scrollTop - это, по сути, «сколько пикселей было прокручено». Я предполагаю, что применение этого к таблице, с которой вы работаете, сделает свою работу.

Спасибо, я также нашел ваш подход в ajaxian.com/archives/…. Я расскажу вам, как он работает с другими элементами, кроме самого окна навигатора. Позвольте мне попробовать.

Guido 19.10.2008 20:37

Я заметил сегодня при чтении свойств DOM в Firebug свойство scrollY (в Firebug на вкладке DOM перейдите к content> scrollY), которое, по-видимому, представляет собой количество пикселей, оставшихся для прокрутки в окне. Попробуйте посмотреть, создано ли это также для прокручиваемых элементов. Затем вы можете использовать функцию Ювала для загрузки новых данных.

Я только что погуглил и нашел эту статью: Реализация динамической прокрутки с помощью Ajax, JavaScript и XML. Похоже, подробное объяснение.

Ответ принят как подходящий

Спасибо за ваши ответы. Это мой последний рабочий код (вдохновленный Грегом и ajaxian.com), который использует некоторые функции jQuery и работает с Таблица данных YUI.

$(".yui-dt-bd").scroll(load_more);

function load_more() {              
    if ($(this).scrollend()) {
        alert("SCROLL END REACHED !");
        // TODO load more data
    }
}

$.fn.scrollend = function() {
    return this[0].scrollHeight - this[0].scrollTop - this.height() <= 0;
}

Мой следующий шаг - реализовать свой собственный YUI Paginator для достижения полной интеграции с компонентами YUI :)

Ик. Не большой любитель бесконечной прокрутки; это опровергает некоторые ключевые предположения людей о том, как работает Интернет. Обещайте, что вы реализуете его только при следующих условиях:

1) вы не заменяете его на совершенно хорошую страницу, которая загружает все в красивую длинную таблицу и позволяет пользователю использовать Ctrl-F для поиска внутри страницы, чтобы узнать, какое время появляется Fringe.

2) вы не планируете вставлять рекламу внизу каждого фрагмента прокручиваемых данных.

3) вы предоставляете рабочий запасной вариант (эй, опять эта красивая длинная таблица) для слепых и людей, просматривающих Интернет с отключенным JavaScript.

Обещаю :) Интернет - это клон настольного приложения, поэтому пользователи знают, как оно работает. Таблица представляет собой своего рода электронную таблицу, она может быть длиной в несколько тысяч строк, поэтому мы стараемся загружать их «по запросу».

Guido 20.10.2008 11:01

Если вы используете YUI, у него есть tableScrollEvent, который запускается при прокрутке таблицы. Соедините это с функцией generateRequest dataTable, и вы сможете реализовать бесконечную прокрутку, наблюдая за tableScrollEvent и начиная запрос, когда вы приближаетесь к концу вашего набора данных.

В документации YUI нет конкретного примера для этого случая, но он показывает вам как обрабатывать данные, возвращаемый методом generateRequest.

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

Другие вопросы по теме