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


    一、Masonry

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

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

    二、Infinite Scroll

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

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

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

    在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。我这里只贴出实现一个动态分页的实现代码(只是其中一个解决办法),希望能起到抛砖引玉的作用,希望有网友分享更加完美的代码。

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

     <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>
  • 相关阅读:
    输入和输出插头
    MCB2300的CTM1050(CAN)
    POJ读书笔记2.1 —— 鸡兔笼带
    Java程序猿的书面采访String3
    JavaScript:undefined And null差异
    设计模式——结构模型
    Qt移动应用开发(六):QML与C++互动
    让我们来谈谈合并排序算法
    安装Eclipse完PyDev插件中没有出现
    汉顺平html5课程分享:6小时制作经典的坦克大战!
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3525232.html
Copyright © 2020-2023  润新知