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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаком с конкретным элементом, который вы используете, но для того, чтобы чтобы реализовать это в полноразмерном окне, вы можете сделать следующее:
$wnd.onscroll = function() {
if (($wnd.height - $wnd.scrollTop) < SOME_MARGIN) then doSomething();
};
Где scrollTop - это, по сути, «сколько пикселей было прокручено». Я предполагаю, что применение этого к таблице, с которой вы работаете, сделает свою работу.
Я заметил сегодня при чтении свойств 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.
Обещаю :) Интернет - это клон настольного приложения, поэтому пользователи знают, как оно работает. Таблица представляет собой своего рода электронную таблицу, она может быть длиной в несколько тысяч строк, поэтому мы стараемся загружать их «по запросу».
Если вы используете YUI, у него есть tableScrollEvent, который запускается при прокрутке таблицы. Соедините это с функцией generateRequest dataTable, и вы сможете реализовать бесконечную прокрутку, наблюдая за tableScrollEvent и начиная запрос, когда вы приближаетесь к концу вашего набора данных.
В документации YUI нет конкретного примера для этого случая, но он показывает вам как обрабатывать данные, возвращаемый методом generateRequest.
Вы можете видеть, что он работает только с здесь YUI. В отличие от одного из предложенных выше решений, полоса прокрутки движется непрерывно, ее положение и размер отражают истинный размер и положение видимой области, и она не загружает следующий пакет, когда полоса прокрутки достигает дна. Полоса прокрутки достигает дна только тогда, когда последняя из всех записей находится внизу области просмотра. Конечно, это работает только в том случае, если вы знаете, сколько там записей.
Спасибо, я также нашел ваш подход в ajaxian.com/archives/…. Я расскажу вам, как он работает с другими элементами, кроме самого окна навигатора. Позвольте мне попробовать.