php - 在 Javascript 中加载更多功能

标签 php javascript jquery iphone ajax

编辑:我认为这个问题最初太笼统了。因此,我真正需要的是一个很好的教程,介绍如何在 iPhone 的 Safari 上实现“加载更多”功能,就像 Twitter 网站(mobile.twitter.com) 所做的那样。只是一个 wordpress 插件不会真正帮助。但是如果插件解释的好,比如wptouch,home(也有这个功能)也是可以的。

我知道它在移动设备上显示并不重要,但我要强调的一点是,如果这样的功能得到很好的解释,那么我就会知道如何自定义它以适合我。

我正在使用 javascript 函数来动态加载来自数据库的条目,以便内容在同一页面中打开(例如使用 twitter(tweets feed)和 facebook(news feed))。

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>

最佳答案

基本思路是监听滚动事件,在服务端实现分页。

只要文档或包含的 HTML 元素滚动,就会触发 scroll 事件。我将使用此草图作为引用,同时牢记以下几点:

假设浏览器窗口的高度为 800px,内容的初始高度为 2500px。加载 AJAX 内容的阈值是当用户滚动到我们内容的底部 100 像素时(在前 2400 像素之后)。

alt text

我们需要跟踪以下 2 项:

  1. 目前加载的项目/页面。
  2. 我们离谷底还有多远 页面。

代码引用在 MooTools 中,但概念是相同的。一旦您理解了它,将其转换为 jQuery 是一项微不足道的任务。

var maxPage = 1;
var threshold = 100;

我们需要知道页面何时滚动,所以为 scroll events 添加一个处理程序.查找到页面底部的滚动距离。如果它小于定义的阈值 (100px),则触发加载下一页的 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});
    }
}

关于php - 在 Javascript 中加载更多功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2315855/

相关文章:

javascript - JS string.replace(regex, function) 并不贪婪

javascript - : up, 键盘点击事件 下、左、右

PHP str_replace 与通配符?

PHP:比较两个具有不同时区的 DateTime 对象

javascript - 如何让 @Model 和 @Emit 在 VueJs 中与 Typescript 一起工作?

jquery - 如何找到元素(div)底部的像素值

javascript - 在 Jquery 插件中未正确创建动态元素

jquery - jsTree 显示/隐藏节点

php - 在代理后面使用 Predis 连接到 Redis

php - 将 HybridAuth 与 CodeIgniter 2 结合使用