一些web2.0网站如facebook、Twitter、人人网底部的分页导航效果,都是采用了无限分页的效果。当然在google reader里面也有类似的endless滚动效果,比传统的分页导航新奇,有更好的用户体验。wordpress里面也可以用到像 twitter more 的方式分页,简单的用jQuery插件就可以实现。

最开始是从jinwen的Js O4w主题上看到这个效果,不过我看了源代码,他只是用了三层获取,就是做三个more.php文件用来响应三次点击事件,并不是真正的无限分页,而且实现起来比较麻烦。找了很久,最近发现了一个infinite-scroll,同时提供了实现这个效果的wordpress插件以及JQuery插件。看了一下,其实wordpress插件原理都是一样,设置也比较麻烦,还不如直接上js来的直接,原文是英语的,转过来:Infinite Scroll jQuery Plugin

原理:jQuery里面有个.load()函数,和ajax结合可以从url获取的html中取出指定选择器里面的元素插入到原页面中

DEMO:可以看看我首页的效果

使用方法:
首先下载 jquery.infinitescroll.js and minified are now on GitHub(官方)

或者从我的站点下载 (大小5kb)

使用方法很简单,加载jQuery库(1.26以上),假设你的首页有如下结构:

<div id="indexpost">
<div id="post-xxx">xxx</div>
<div id="post-xxx">xxx</div>
......

</div>
<div id="navigation"><a href=""../page/2>下一页</a></div>

当然,因为只需要下一页,分页插件是不需要了,在index.php对应的地方就用默认的分页:

next_posts_link(__('MORE'))

在合适的地方加入一段js:(注意更改 对应的选择器适应自己的主题)

$('#indexpost').infinitescroll({
   //#indexpost 是包括所有文章的div元素id
      navSelector  : "#navigation",
                     // 页面分页元素(成功后隐藏)
      nextSelector : "#navigation a",
                     // 需要点击的下一页链接
      itemSelector : "#indexpost div.post"   ,
                     // 返回后文章对应的插入位置
      loadingImg   : themeurl+"/images/ajax-loader.gif",
                     //加载图片路径(绝对路径)
      loadingText  : "加载中...",
                   //显示的提示文字
      animate      : true,
                   //加载完毕是否采用动态效果
      extraScrollPx: 150,
                  //向下滚动的像素,必须开启动态效果
      donetext     : "后面没有了" ,
                //返回404,即到头了显示的文字
    },function(arrayOfNewElems){
       home_js();
            //成功后执行的自定义的函数,如页面javascript的重载

 });

这样应该可以实现无限滚屏,就像google reader,到底部自动ajax载入下一页。但这样有时候页面很多,而访客并不想翻页,那么需要一个点击后再加载下页的功能,就像twitter底部点击more的效果。

那么继续在上一段js后加入:

// 取消scroll绑定
    $(window).unbind('.infscr');
  // 手动点击的元素
    $('#navigation a').click(function(){
      $(document).trigger('retrieve.infscr');
      return false;
    });

    // 如果没有下一页,去掉分页
    $(document).ajaxError(function(e,xhr,opt){
      if (xhr.status == 404) $('#navigation').remove();
    });

还需要设计more按钮的css,例如:

#navigation{display:block!important; border-radius:10px; -moz-border-radius:10px; -webkit-border-radius:10px; border: 1px solid #ddd; background: #EFEFEF;box-shadow: 2px 2px 2px rgba(50,50,50,0.4); color: #444; text-decoration: none;width:60%;margin:0 0 0 90px; padding: 10px;text-align: center;}

自己可以设计以适应模板,注意“display:block!important;”成功后还要显示下一页的分页链接,不能隐藏。

这样应该就可以了。

  1. tea (2011.04.26 at 21:24) 41楼

    楼主不就是为了几个回访流量吗,你看人家木木木的网站,留言一大堆,交流气氛好多了。

    • winy() (2011.04.26 at 22:49)

      @tea ,我都告诉你方法了,怎么找教程,怎么添加。难道非要我告诉你直接就能用的代码?
      跟你说这个稍微有点复杂,最好自己先学学基础有问题吗?请教问题前先自己学会搜索

      再说我需要流量干啥,我又没挂广告 :arrow:

    • Tee (2011.07.21 at 17:36)

      @winy,这人...怎么不搜索

  2. 自说Me话 (2011.05.19 at 12:57) 42楼

    请教博主 我在您的W1s主题上无限翻页成功了,只是不知道该怎么把那个more 在loading的时候移除,然后在加载后再让他出现,希望博主能够指点一二

    • winy (2011.05.19 at 23:13)

      @自说Me话
      移除是自动的,默认插件就会,现在方法更新了:
      css里面不需要指定display
      只要在插件回调函数中function(arrayOfNewElems)添加[code]
      $("#ajaxnav").css("display","block"); [/code]

    • 自说Me话 (2011.05.19 at 23:26)

      @winy ,哈哈 已经成功了.多谢博主,呵呵,感谢博主的W1s主题.嘿嘿.有空到你博客上来学习, :smile:

  3. ayun (2011.09.09 at 13:48) 43楼

    博主你好,我觉得你的教程里对infinitescroll函数中itemSelector的解释不对,原文是“// selector for all items you'll retrieve”,意思是你要获取的所有元素的选择器,而不是返回后文章对应的插入位置。

  4. 魏星博客 (2011.09.20 at 11:00) 44楼

    终于找到这个效果了,谢谢!!

  5. 坏小子 (2011.11.20 at 17:30) 45楼

    请教要实现在浏览器源代码像这样的更多精彩...该如何修改"> 默认的是没有ID=“more”及onclick…… 等待回复

  6. hytino (2011.12.02 at 19:15) 46楼

    我按你上面的一步步设置,始终不能刷新下一页。是不是URL命名问题呢?我的 下一页链接是 下一页

  7. 沫沫 (2011.12.31 at 11:49) 47楼

    请问你这个可以自定义路径么?意思就是我本来是1.html---2.html---3.html
    现在我想 1.html---5.html--78.html 而不是那种循环的该怎么做?这个插件可以这么使用么?

评论分页: 1 ... 4 5 6 7

发布评论

邮箱(必填)

换个背景