Я не создал все решение самостоятельно. Первоначальная идея взята из образца All-In-One Code Framework . Я просто настраивал свой BlogEngine, и для одного из модулей я подумал, что было бы неплохо не использовать пейджинг, и я должен пойти на бесконечные прокрутки. Эта идея кажется мне крутой, и, не теряя времени, я просто выполнил быстрый поиск в Интернете и наткнулся на решение, которое является частью All-In-One Code Framework . Это не было полным решением, которое я искал, но я могу повторно использовать часть jQuery в образце.
Сборка части jQuery
Я просто повторно использую весь скрипт jQuery без каких-либо серьезных изменений. Единственное изменение, которое я сделал, — это имя веб-метода в параметре url метода Ajax, который есть в коде страницы, и измените имя метода на InfiniteScroll :
function InfiniteScroll() { $('#divPostsLoader').html('<img src="images/loader.gif">'); //send a query to server side to present new content $.ajax({ type: "POST", url: "Default.aspx/GetData", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if (data != "") { $('.divLoadData:last').after(data.d); } $('#divPostsLoader').empty(); } }) };
У меня уже есть 2 div на странице, где данные загружаются, когда пользователь прокручивает вниз в нижней части страницы. Это самый простой Ajax-вызов, написанный на jQuery, и я предполагаю, что вы знаете синтаксис и методы и не требует объяснений. Здесь мне нужно вызвать эту функцию, когда пользователь прокручивает внизу страницы. Итак, как узнать, когда пользователь прокручивает и достигает нижней части страницы? Вот метод, который запускает функцию InfiniteScroll () :
$(window).scroll(function () { if ($(window).scrollTop() == $(document).height() - $(window).height()) { InfiniteScroll(); } });
Убедитесь, что вы поместили функцию прокрутки в функцию document.ready . Теперь, когда пользователь прокручивает внизу страницы, он вызывает функцию InfiniteScroll (), которая, в свою очередь, загружает новые данные в divLoadData .
Код позади
В выделенном фрагменте кода создайте функцию WebMethod, которая возвращает строку HTML. В этом примере я загружаю заголовок, дату публикации и фрагмент моего блога из базы данных движка блога, которая является SQL Server CE 4.0. Вот метод:
[WebMethod] public static string GetData() { RecordCount = RecordCount + 10; string Sql = "SELECT Title, DateCreated, Slug FROM be_Posts ORDER BY Title OFFSET " + FirstCount + " ROWS FETCH NEXT 10 ROWS ONLY"; FirstCount = RecordCount; StringBuilder sb = new StringBuilder(); dt = new DataTable(); da = new SqlCeDataAdapter(Sql, con); con.Open(); da.Fill(dt); DataView dv = dt.DefaultView; foreach (DataRowView row in dv) { sb.AppendFormat("<p>Post Title" + " <strong>" + row["Title"] + "</strong>"); sb.AppendFormat("<p>Post Date" + " <strong>" + row["DateCreated"] + "</strong>"); sb.AppendFormat("<p>Slug" + " <strong>" + row["Slug"] + "</strong>"); sb.AppendFormat("<hr/>"); } sb.AppendFormat("<divstyle='height:15px;'></div>"); con.Close(); return sb.ToString(); }
Бесконечная прокрутка — это не что иное, как автоматическое разбиение по страницам. Каждый раз, когда пользователь прокручивает страницу вниз, запрос запускается и получает новый набор данных. Поскольку я использую SQL CE 4.0, пейджинговый запрос отличается от SQL Server 2008.
Запрос для SQL CE 4.0:
SELECT Title, DateCreated, Slug FROM be_Posts ORDER BY Title OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Измените OFFSET и FETCH NEXT, чтобы получить следующий набор результатов.
Запрос для SQL Server 2008:
SELECT Title, DateCreated, Slug FROM ( SELECT ROW_NUMBER() OVER (ORDER BY title) AS row, Title, DateCreated, Slug FROM be_Posts ) AS a WHERE row BETWEEN 1 AND 10
Я изменил запрос в приведенном выше коде, чтобы получать набор следующих результатов каждый раз, когда пользователь прокручивает внизу страницы. Когда пользователь прокручивает страницу вниз, я увеличиваю FirstCount на 10, что является значением переменной RecordCount . Я приложил полное решение, чтобы вы могли попробовать. У меня нет базы данных, включенной в решение, так как это база данных моего блога. Вы должны создать один, чтобы проверить это.
Загрузить: InfiniteScroll.zip (2.28 МБ)