jquery实现瀑布流并与php实现数据交互

以前js 实现过一个瀑布流,jquery 也来实现一个

主要思路:

1  先显示出来大概20张图片,使界面出现滚动条

2 设置显示出来图片父id 设置为relative 定位,图片定位方式为float 定位

3 使刚显示出来的图片作为折叠出现,呈现为瀑布流

4 当滚动 滚动条时,判断是否进行加载图片

5 使新加载的图片重新进行瀑布流排序

重点:

1 判断什么时间进行加载新图片

2 实现瀑布流式排序

怎样确定加载哪部分图片那,在后台limit 一下位置就ok啦

好,上代码:

1 先显示出来部分图片

                //实现瀑布流显示图片
                public function photo(){
                    $id = M("Cate")->field("id")->where("name = '相册展示'")->select();
                    $this->image_list = M("Blog")->field("content ,summary")->limit(10)->order("time desc")->where("cid = {$id[0]['id']}")->select();
                    $this->length=10;//刚开始显示10张图片
                    $this->cur_position = '相册展示';
                    $this->id           = $id[0]['id'];
                    $this->display();
                }

2 前台代码:

<ul class="tips" id="wf-main">
                    <volist name="image_list" id='v'>
                        <li class="wf-cld"><img src="{$v.content|ltrim = ###,'.'}"  width="200" height="auto" alt="{$v.title}" /></li>
                        <li class="wf-cld"><img src="{$v.summary|ltrim = ###,'.'}" width="200" height ="auto" alt="{$v.title}" /></li>
                    </volist>
                    </ul>

3 前台样式:

    <!--content end-->
    <style type='text/css'>
        #wf-main{position: relative;}
        #wf-main li{padding: 15px 0 0 15px; float:left;}
    </style>

4 重点 js 代码:

$(function(){
    waterfall();
    //进行加载图片
    $(window).scroll(function(){
         if(checkscrollside()){
             var offset = $("input[name=offset]").val();
             var length = $("input[name=length]").val();
             var justice = $("input[name=justic]").val();
             if(justice === offset){
                 return false;
             }else{
                 $("input[name=justic]").val(offset);
             }
             $.post( //每次添加新元素进行瀑布流排序
                     "/Index/Show/more_photo",
                    {
                        offset :offset,
                        length:length
                    },function(data){
                        if(data){
                            $(data).each(function(index,value){
                            $li =  $("<li>").addClass("wf-cld").appendTo("#wf-main");
                            $("<img>").attr({"src":value.summary,"title":value.title}).css({"width":"200px","height":"auto"}).appendTo($li);
                            });
                            $("input[name=offset]").val(parseInt(offset) + 10);
                            console.log($("#wf-main>li").length);
                            //确保滚动条高度保持不变
                            var scroll_top  = $(window).scrollTop();
                            waterfall();
                            $(window).scrollTop(scroll_top);
                        }

                    },"json");

         }
    });

});
//让图片折叠排列
function waterfall(){
   var $par_main = $("#wf-main"); //父元素
   var $child_main = $("#wf-main>li"); //子元素
   var par_width = $par_main.width(); //获得父元素的宽度
   var child_width = $child_main.eq(0).width(); //获得子元素宽度
   var num_col     = Math.floor(par_width / child_width); //一行显示多少列
   var col_arr = []; //一列中所有元素相加后的高度 做多有num_col 个值
   col_arr.length=0;
   $child_main.each(function(index,value){
      if(index < num_col){
          col_arr[index] = $(value).height();
      }else{
          var minH = Math.min.apply( null, col_arr );//数组pinHArr中的最小值minH
          var min_index =  $.inArray(minH,col_arr); //获得最小索引值
          //数组中最小元素的高 +  新块的高 + 15 空格距离
          col_arr[min_index] += $child_main.eq(index).height() + 15;

          $(value).css({  //设置元素显示位置
              position:"absolute",
              top:minH + 15 ,
              left : $child_main.eq(min_index).position().left
          });
          var maxH = Math.max.apply(null,col_arr);
          $par_main.height(maxH); // 更改父元素高度
      }
   });
}
//是否进行夹杂滚动条 当最后一张图片顶部 到 最后一张图片自身高度的一半作为分界线
function checkscrollside(){
    var  $child_main =  $("#wf-main>li");
    var trigger_heigth = $child_main.last().get(0).offsetTop + $child_main.height() / 2;
    //滚动条高度
    var scroll_top = $(window).scrollTop();
    //获取页面宽度
    var docu_width = $(document).width();
    return (trigger_heigth <scroll_top + docu_width)?true:false;
}

5 每次都重新加载新图片的后台代码:

    //根据ajax 每次显示出来部分图片
                public function more_photo(){
                    $offset = $_POST['offset'];
                    $length = $_POST['length'];
                    $id = M("Cate")->field("id")->where("name = '相册展示'")->select();
                    $image_list = M("Blog")->field("content ,summary,title")->limit($offset,$length)->order("time desc")->where("cid = {$id[0]['id']}")->select();
                    exit(json_encode($image_list));
                }

好啦,到此结束:

顺便秀秀战果了:

实际地址就是在个人博客上面啦:

http://buyingfeiblog.sinaapp.com/

代码进行时,敬请期待!

时间: 2024-12-24 19:13:22

jquery实现瀑布流并与php实现数据交互的相关文章

【前端】用jQuery实现瀑布流效果

jQuery实现瀑布流效果 何为瀑布流: 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格. 瀑布流的应用: 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内获得更多的信息量,而瀑布流里懒加载模式又避免了用户鼠标点击的翻页操作,瀑布流的主要特性便是错落有致,定宽而不

jQuery实现瀑布流的简单方法

HTML代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>waterFall</title> <link rel="stylesheet" href="wf.css"> <script src="jquery.js">

用JavaScript和jQuery实现瀑布流

▓▓▓▓▓▓ 大致介绍 在慕课网上学习了用原生js和jQuery实现瀑布流,在这里做个笔记 ▓▓▓▓▓▓ 用JavaScript实现 基本结构: <div id="main"> <div class="box"> <div class="pic"><img src="images/1.jpg" alt=""></div> </div>

jquery版瀑布流

原文:jquery版瀑布流 一个月前用jquery实现了瀑布流效果,看着当时的代码有点难过……今天抽时间稍微修改了一下.额,现在看起来不是那么难受了,就来和大家分享一下.废话不多说,开始正题~ 一.演示效果 二.html代码 <div class="header">header</div> <div class="box clearfix"> <div class="waterFall"> <

用jQuery实现瀑布流效果学习笔记

jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把其中的几个函数具体记录一下. 首先,在WebStorm中新建一个工程,导入jquery库和几张img放在img文件夹下,新建html和css文件,用来搭建基本的网页结构.我们设定图片的宽度固定,高度不定,绝对定位,左浮动.这里就不细说了.我们主要讲jquery部分的知识. 这里我们讲一下我们要实现的

网友微笑分享原创Jquery实现瀑布流特效

首先非常感谢网友微笑的无私分享,此Jquery特效是一款非常流行和实用的瀑布流布局,核心代码只有几十行,是我见过代码量最少的瀑布流布局,非常适合网友们学习哦,希望大家好好看一下这个Jquery特效的原代码,里面的每个功能注释写得非常详细.. 主要包括了以下几个功能函数:1.瀑布流主函数2.获取高度最小的列的函数3.判断请求数据的开关的函数4.请求数据加载的样式的函数 瀑布流代码如下: JS与CSS代码 /** * 作者:微笑 * QQ:904835003 * 邮箱:[email protecte

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作) 一.简单说明 使用数据刷新框架: 该框架提供了两种刷新的方法,一个是使用block回调(存在循环引用问题,_ _weak),一个是使用调用. 问题:在进行下拉刷新之前,应该要清空之前的所有数据(在刷新数据这个方法中). 移除正在显示的cell: (1)把字典中的所有的值,都从屏幕上移除 (2)清除字典中的所有元素 (3)清除cell的frame,每个位置的cell的frame都要重新计算 (4)清除可复用的缓存池. 该部分的代码如下: 1

用jquery实现瀑布流案例

一.瀑布流是我们常见的案例,这里主要讲述,用jquery的方式实现瀑布流的功能! 引言:我们经常见到很多网站的瀑布流功能,如淘宝.京东这些商品等等.. 实现它我们首先考虑几个问题:1.获取到数据   2.排列的方式  3.如何实现排列 其实,在瀑布流里有个核心的功能就是用到了绝对定位 我们逐步深入分析: 这是html的布局,css布局可以自己设置,只要保证grid盒子有绝对定位,其父元素有相对定位即可!后面有参考代码 下面是script部分 这种方式,可以通过for循环按照顺序获取图片的索引值,

Jquery之瀑布流

效果图展示: 示例代码如下: html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body{ padding: 0; margin:0; font-family: "微软雅黑"; text-align: center