仿淘宝/蘑菇街形式,瀑布流效果 -- 固定列数

<! DOCTYPE   html   PUBLIC   "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd"   >
< html >
< head >
< meta   http-equiv = "Content-Type"   content = "text/html; charset=UTF-8" >
< title >   瀑布流实例 </ title   >
< link   type = "text/css"   rel = "stylesheet"   href = "./7.css"   />
< script   type = "text/javascript"   src = "http://www.haodou.com/public/js/jquery-1.5.1.min.js"   ></ script >
< script   type = "text/javascript"   src = "./7.js" ></   script >
</ head >
< body >
         < div   id =   "waterfall_container1"   class = "left" >
               < div   class = "img_container1"   ></ div >
               < div   class = "img_container1"   ></ div >
               < div   class = "img_container1"   ></ div >
               < div   style =" clear   : both ;" ></ div   >
         </ div >
         < div   id =   "waterfall_container2"   class = "right" >
               < div   class = "img_container"   ></ div >
               < div   class = "img_container"   ></ div >
               < div   class = "img_container"   ></ div >
               < div   style =" clear   : both ;" ></ div   >
         </ div >
         < div   style =" clear   : both ;" ></ div   >
      
         < script   type = "text/javascript"   >
            var   tpl =   '<div>' +
                                 '<div><img src="{img}" width="195" /></div>' +
                                 '<div>{about}</div>' +
                                 '<div>{title}</div>' +
                                 '<div>{start}</div>' +
                      '</div>' ;
            
               /**
             * waterfall:                       瀑布流效果的入口函数
             * $("#waterfall_container1"):     外层容器的对象 (必填)
             * url:                             ajax请求的url地址,可以带参数 (必填)
             * tpl:                             前端HTML模板,其中{img},{about},{title},{start} 必须与 ajax返回的数组下标一致
             *                                  img,about,title,start命名可以随意 (必填)
             * selector:                        外层容器(waterfall_container1)中的每列容器(img_container1)的class名称,
             *                                  格式:‘.img_container1’,注意别忘记‘.’,默认值:‘.img_container’ (非必填)
             * max_page:                        ajax请求最大的页数,默认为:5 ,超过该值不再发送ajax请求(非必填)
             *
             * waterfall_1 :                    返回函数(setActive), 参数val:设置是否开启根据窗口下拉比例多次获取函数,false:不开启,true:开启,默认:true
             *                                  作用:用于多标签切换,只有当前选中tal标签才能继续通过ajax获取数据,其它一律不能获取数据,tal标签切换时手动触发该函数
             */
            var   waterfall_1 = waterfall($( "#waterfall_container1" ), {url: './7.php?a=1&b=2'   , tpl:tpl, selector: '.img_container1' , max_page:10});
               //waterfall_1.setActive(false);
            
            var   waterfall_2 = waterfall($( "#waterfall_container2" ), {url: './7__.php' , tpl:tpl});
               //waterfall_2.setActive(false);
         </ script >
</ body >
</ html >




/**
  *   瀑布流效果JS
  *
  *   @author   lixiaogang   <858864436@qq.com>
  */
;( function (){
         //保存每个选项卡所对应的数据[instance的json结构]
         var   instances = [], $win = $(window), scroll_top = 0;

         /**
         *   瀑布流效果入口函数
         *   @param     object          el                    瀑布流外层的容器的节点对象
         *   @param     json      options                     json对象:
         *                                                   url:ajax请求路径(必填),
         *                                                   tpl:html模板(必填),
         *                                                   selector:ajax数据填充节点的class名称,默认为:.img_container
         *                                                   max_page:ajax获取最大的页数,默认为:5
         *
         *   @return    object                              setActive:设置是否开启根据窗口下拉比例多次获取函数,false:不开启,true:开启
         */
      waterfall =   function (el, options) {
               if (!options.url || !options.tpl)   return ;
               var   instance = {element: el, active:   true , loading:   true , page: 0, max_page:5};
               if (options.max_page) instance = $.extend(instance, {max_page:options.max_page});
            instance.options = $.extend({selector:   '.img_container' }, options);
            instance.children = $(el).find(instance.options.selector);
            instance.cols = instance.children.length;

               var   index = instances.length;
            instances[index] = instance;

            load(instance);

               return   {
                  setActive:   function (val) {
                        instances[index].active = !!val;
                  }
            };
      };

         //ajax 动态获取数据
         function   load(instance) {
            instance.page++;
               if (instance.page > parseInt(instance.max_page))   return ;
            $.getJSON(instance.options.url, {page:instance.page},   function (data) {
                     var   data_len = data.length, temp = [];   //临时保存html
                     for ( var   i=0; i<data_len; i++){
                           var   item = data.shift(), index = i % instance.cols;
                           if ( 'undefined'   ==   typeof   temp[index]) temp[index] =   '' ;
                        temp[index] += instance.options.tpl.replace( /\{\w+\}/g   ,   function (m) { return   item[m.substring(1,m.length-1)];});
                  }
                     if (0 < temp.length){
                           for ( var   i=0; i<instance.cols; i++){
                              instance.children.eq(i).append(temp[i]);
                        }
                  }
                  instance.loading =   false ;
            });
      };

         /**
         *   窗口绑定事件
         *   1.     active=false     不触发ajax的数据获取
         *   2.     loading=true     表示正在进行ajax数据获取,不进行多次数据获取
         */
      $win.scroll(   function () {
               var   temp_scroll_top = $win.scrollTop();
               if   (temp_scroll_top > scroll_top && ($win.height() + $win.scrollTop()) >= $( "body"   ).height()-100) {
                  scroll_top = temp_scroll_top;
                  $.each(instances,   function (i, instance){
                           if   (!instance.active || instance.loading)   return ;
                        instance.loading =   true ;
                        load(instance);
                  });
            }
      });
})();

123宝贝网(www.123baby.net)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值