Masonry+Infinite-Scroll实现无刷新无分页完美瀑布流(转)

1、Masonryjavascript

 

是基于Jquery插件,用于对CSS布局的可移动层进行从新布局。Masonry愿意石工,能够这样形象的理解,页面上不少大小不一的移动层能够想象成散乱的石头,通过Masonry这个石工处理后,变成一堵美观的墙。css

         官网地址:http://masonry.desandro.comhtml

 

2、Infinite Scrolljava

是基于Infinite Scroll也是基于Jquery插件,用于当滚动条滚动时追加页面内容,有网友称这种效果为”无刷新无分页完美瀑布流”展示方式。jquery

官网地址:http://infinite-scroll.com/git

 

3、Maonsry+Infinite-Scroll实现滚动式分页github

在Masonry的Example里有自动的与infinite-scroll结合的实现滚动式分页的例子,地址在这里http://masonry.desandro.com/demos/infinite-scroll.html浏览器

实际上这个例子仍是有点粗糙,若是打开浏览器的开发者工具进行脚本跟踪,会发现翻到第5页后会出现404加载出错,到github下载整个project,能够看到目录pages下有2.html,3.html,4.html,5.html。Infinite-Scroll默认会往下翻,找不到6.html后报错。并且这个翻页的例子是生成了静态的html。我这里只贴出实现一个动态分页的实现代码(只是其中一个解决办法),但愿能起到抛砖引玉的做用,但愿有网友分享更加完美的代码。app

代码采用Freemarker模板语言实现,代码片段:ide

 <script type="text/javascript" src="/js/jquery/ jquery.1.7.1.min.js"></script>
         <script type="text/javascript" src="/js/jquery/plugin/jquery.masonry.min.js"></script>
         <script type="text/js" src="/scripts/jquery/plugin/jquery.infinitescroll.min.js"></script>
<script type="text/javascript">
    var totalpage = ${result.totalPage};//这里是从服务端获得总共分页数
        var readedpage = 1;//当前滚动到的页数
</script>
<!-- page-nav 建立一个不可见对象,用于载入下一页数据入口元素点 -->
<nav id="page-nav">
  <a href="${media_root}/billstudy/bill/question/all/null/1"></a>
</nav>
<div id="bills_main">
 
   <div id="masonid" class="bills_conright">
<#if result?exists && (result.data.size() gt 0)>
   <#list result.data as template>
          <div class="bills_piccon">
                       //这里是每条数据的内容
          </div>
    </#list>
</#if>
</div>
 <div class="clear"></div>
</div>
 
<script>
  $jq(function(){
    var $container = $jq('#masonid');
    readedpage++;
        if(totalpage>1){//若是总共只有一页,那就不须要滚动加载效果了
                 $jq("#page-nav a").attr("href","/billstudy/bill/question/all/null/"+readedpage);
        $container.imagesLoaded(function(){
      $container.masonry({
       // itemSelector: '.bills_piccon'
       // ,        columnWidth: 100
      });
    });//这里参数能够为空,但必需要初始化masonry,不然后面会报找不到方法appended。
   
    $container.infinitescroll({
      navSelector  : '#page-nav',    //指定page-nav
      nextSelector : '#page-nav a',  // page-nav下一页的连接
      itemSelector : '.bills_piccon',     // 要获取追加的页面元素
      loading: {
          finishedMsg: 'No more pages to load.',
          img: 'http://i.imgur.com/6RMhx.gif'
        }
      },
     // pathParse: ["/billstudy/bill/question/all/null/", ""],
      // trigger Masonry as a callback
      function( newElements ) {
        // hide new items while they are loading
        var $newElems = $jq( newElements ).css({ opacity: 0 });
        // ensure that images load before adding to masonry layout
        $newElems.imagesLoaded(function(){
          // show elems now they're ready
          $newElems.animate({ opacity: 1 });
          $container.masonry('appended', $newElems, true);
          readedpage++;//当前页滚动完后,定位到下一页
          if(readedpage>totalpage){//若是滚动到超过最后一页,置成不要再滚动。
                $jq("#page-nav").remove();
                $container.infinitescroll({state:{isDone:true}});
          }else{
             //'#page-nav a置成下一页的值
               $jq("#page-nav a").attr("href","/billstudy/bill/question/all/null/"+readedpage);
          }
        });
      }
);
}
   
  });
</script>
相关文章
相关标签/搜索