Загрузить больше функций в Javascript - PullRequest
5 голосов
/ 23 февраля 2010

РЕДАКТИРОВАТЬ: Этот вопрос изначально был слишком общим, я думаю. Итак, что мне действительно нужно, это очень хороший учебник о том, как реализовать функцию Load More в Safari для iPhone точно так же, как веб-сайт Twitter (mobile.twitter.com). Просто плагин WordPress действительно не поможет. Но если плагин хорошо объяснен, как если бы это был wptouch, home (который также имеет эту функцию), который также может это сделать.

Я знаю, что на самом деле не имеет значения, отображается ли это на мобильном устройстве, но я подчеркиваю, что если такая функция хорошо объяснена, то я буду знать, как настроить его под себя.

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

Версия php / html (которая открывает страницу в новой вкладке):

echo '<a href="http://'. $_SERVER['HTTP_HOST'] .'/'.$domain_page.'?form='.$form_id.'&page='.($page+1).'">Load more entries&rsaquo; </a>';

Версия javascript / ajax:

<div id="call_hv<?php echo md5($_SERVER['REQUEST_URI']); ?>" class="ajax-load-more">

                <img id="spinner<?php echo md5($_SERVER['REQUEST_URI']); ?>" class="spin" src="<?php bloginfo('template_directory'); ?>/images/main-ajax-loader.gif" style="display:none" alt="" /> 

                <a class="ajax" href="javascript:$ajax_hv('#spinner<?php echo md5($_SERVER['REQUEST_URI']); ?>').fadeIn(200); 

                $ajax_hv('#ajaxentries_hv<?php echo md5($_SERVER['REQUEST_URI']); ?>').load('form='<? echo $form_id; ?>&page=<?php echo $page+1;?>', {}, 

                function(){ $ajax_hv('#call_hv<?php echo md5($_SERVER['REQUEST_URI']); ?>').fadeOut();})">Load more entries... 

                </a>

Ответы [ 2 ]

8 голосов
/ 12 марта 2010

Основная идея заключается в прослушивании событий прокрутки и реализации подкачки на стороне сервера.

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

Допустим, высота окна браузера составляет 800 пикселей, а начальная высота содержимого - 2500 пикселей. Пороговое значение для загрузки содержимого AJAX - это когда пользователь прокручивает до нижних 100 пикселей нашего содержимого (после первых 2400 пикселей).

alt text

Нам нужно будет отслеживать следующие 2 элемента:

  1. Предметы / Страницы загружены до сих пор.
  2. Как далеко мы от основания страница.

Ссылки на код в MooTools, но концепция та же. Преобразование его в jQuery является тривиальной задачей, если вы понимаете это.

var maxPage = 1;
var threshold = 100;

Нам нужно знать, когда страница прокручивается, поэтому добавьте обработчик для событий прокрутки . Найдите расстояние прокрутки до нижней части страницы. Если он меньше установленного порогового значения (100 пикселей), то запускается AJAX-запрос, загружающий следующую страницу. Когда ответ приходит (если он успешен), добавьте его на страницу и увеличьте номер maxPage.

Еще одна вещь, о которой следует помнить, - запускать AJAX-запрос, только если контент еще не загружается. Имейте флаг, который указывает, ожидает ли запрос страницы все еще.

var isLoading = false;

window.addEvent('scroll', function() {
    // the height of the entire content (including overflow)
    var contentHeight = window.getScrollSize().y;
    // current scroll is height of content that's above the viewport plus
    // height of the viewport.
    var contentScrolled = window.getScroll().y + window.getSize().y;
    var distanceToBottom = contentHeight - contentScrolled;
    var closeToBottomOfPage = distanceToBottom < threshold;
    var shouldLoadMoreContent = !isLoading && closeToBottomOfPage;

    if(shouldLoadMoreContent) {
        // create an ajax request
        var request = new Request({
            url: 'http://www.example.com/more',
            onSuccess: function(responseText) {
                $('page').append(responseText);
                maxPage++;
            },
            onRequest: function() {
                isLoading = true;
            },
            onComplete: function() {
                isLoading = false;
            }
        });
        // fire off ajax request with the page # as a querystring param
        request.send({page: maxPage});
    }
}
2 голосов
/ 23 февраля 2010

Обычно называется бесконечным свитком. Есть плагины для jQuery и Wordpress:

http://www.infinite -scroll.com /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...