Я не создал все решение самостоятельно. Первоначальная идея взята из образца 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 МБ)