Ищите способ динамически добавлять больше списков в конец списка jQuery Mobile - PullRequest
7 голосов
/ 08 марта 2012

Я ищу способ добавить больше списков в конец моего списка после прокрутки вниз.Например, у меня изначально есть возврат 20 предметов.Я собирался использовать нумерацию страниц и просто возвращать столько, сколько вернулось из моего запроса, НО я предпочел бы вернуть 15-20, а затем в конце прокрутки либо автоматически добавить больше в этот список, либо иметь кнопку с надписью «посмотреть больше»,Я новичок в jQuery Mobile и задаюсь вопросом, видел ли кто-нибудь подобное реализованное.Это также используется в PhoneGap.Если да, можете ли вы указать мне правильное направление?Большое спасибо заранее!

Ответы [ 3 ]

18 голосов
/ 08 марта 2012

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

//setup an interval so we can throttle the `scroll` event handler since there will be tons of `scroll` events fired
var timer    = setInterval(function () {
        scrollOK = true;
    }, 100),//run this every tenth of a second
    scrollOK = true;//setup flag to check if it's OK to run the event handler
$(window).bind('scroll', function () {

    //check if it's OK to run code
    if (scrollOK) {

        //set flag so the interval has to reset it to run this event handler again
        scrollOK = false;

        //check if the user has scrolled within 100px of the bottom of the page
        if ($(this).scrollTop() + $(this).height() >= ($(document).height() - 100)) {
            //now load more list-items because the user is within 100px of the bottom of the page
        }
    }
});

Вот демонстрационная версия: http://jsfiddle.net/knuTW/

Обновление

Немного проще просто загрузить кнопку, которую пользователь может нажать, затем, когда она нажата, загрузить больше строк и затем снова добавить кнопку load-more в конец списка.:

var $loadMore = $('ul').children('.load-more');
$loadMore.bind('click', function () {
    var out = [];
    for (var i = 0; i < 10; i++) {
        out.push('<li>' + (count++) + '</li>');
    }
    $('ul').append(out.join('')).append($loadMore).listview('refresh');
});​

Вот демоверсия: http://jsfiddle.net/knuTW/2/

3 голосов
/ 08 марта 2012

Этот пример может помочь:

http://jsfiddle.net/dhavaln/nVLZA/

// load test data initially
for (i=0; i < 20; i++) {
    $("#list").append($("<li><a href=\"index.html\"><h3>" + i + "</h3><p>z</p></a></li>"));
}
$("#list").listview('refresh');


// load new data when reached at bottom
$('#footer').waypoint(function(a, b) {
    $("#list").append($("<li><a href=\"index.html\"><h3>" + i+++"</h3><p>z</p></a></li>"));
    $("#list").listview('refresh');
    $('#footer').waypoint({
        offset: '100%'
    });
}, {
    offset: '100%'
});​
0 голосов
/ 09 марта 2012

Есть несколько статей, описывающих методы для «вечной прокрутки» и «бесконечной прокрутки», о чем, как вам кажется, вы спрашиваете.

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

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

http://www.infinite -scroll.com / бесконечномерным прокрутки JQuery-плагин /
http://masonry.desandro.com/demos/infinite-scroll.html
http://designbeep.com/2011/08/12/12-jquery-infinite-scrollingscroll-read-plugins-for-content-navigation/ http://www.jquery4u.com/tutorials/jquery-infinite-scrolling-demos/

...