java ajax瀑布流,Ajax 实现滚动加载瀑布流 详解

/**

* 需求:

* 1、页面加载完成后 请求服务器 获取第一屏的数据

* 2、点击加载更多 请求服务器 获取下一屏的数据

* 3、当页面滚动到一定的高度时 请求服务器 获取下一屏的数据 渲染在页面中

*/

一、html代码

加载更多

二、js代码

/**

* 需求:

* 1、页面加载完成后 请求服务器 获取第一屏的数据

* 2、点击加载更多 请求服务器 获取下一屏的数据

* 3、当页面滚动到一定的高度时 请求服务器 获取下一屏的数据 渲染在页面中

*/

$(function () {

//由于需要多次调用$.ajax 方法 多次请求服务器 所以可以封装一个请求服务器的方法

//index 表示: 要获取数据的页码

function getData(index) {

$.ajax({

type:'post',

url:'data.php',

data:{page:index},

dataType:'json',

beforeSend:function () { //请求发送之前回调函数

//如果正在请求 下次点击无效的

if($('.tips').hasClass('loading')){

return false;

}

//请求发送前改变按钮的样式

$('.tips').addClass('loading').text('正在加载...');

},

success:function (info) { //请求成功返回

//准备数据

//准备模板

//组装数据、模板

var html = template('tmp',info);

//追加到页面中

$('.items').append(html);

//使用瀑布流插件进行布局

$('.items').waterFall();

//缓存下一页 页码

$('.tips').attr('data-page',info.page);

},

error:function () { //请求出错回调函数

},

complete:function () { //请求完成时调用

//加载完成 按钮样式恢复

$('.tips').removeClass('loading').text('加载更多');

}

});

}

//调用函数

getData(1);

//第二个需求 点击按钮加载下一页

$('.tips').click(function () {

//需要获取下一页的页码

var page = $(this).attr('data-page');

//调用函数

getData(page);

});

//第三个需求 当页面距离底部一定距离时 加载下一屏内容

$(window).scroll(function () {

//获取需要的宽高

// 底部的距离 = $(items).height+$(items).offset().top-$(window).scrollTop-$(window).height();

var wHeight = $(window).height();

var scrollTop = $(window).scrollTop();

var iHeight = $('.items').height();

var iTop = $('.items').offset().top;

var top = iHeight + iTop - wHeight - scrollTop;

//当items 距离浏览器底部的距离小于 100时 开始加载下一屏内容

if(top<100){

//获取下一页页码

var page = $('.tips').attr('data-page');

//调用函数

getData(page);

}

});

})

三、模板引擎

四、php模拟数据库部分

header('Content-Type:application/json; charset=utf-8');

// 读取json数据

// 正常工作中是从数据库里取的

$data = file_get_contents('./data.json');

// 转换成PHP数组

$data = json_decode($data);

// 根据页码计算offset

$page = $_POST['page'];

// 每页10条

// 10-9

// 210-19

// 320-29

// 430-39

// (page - 1) * 10 计算得到每一页的第1条数据

// 每页的数据计算每页数据的"起点""

$offset = ($page - 1) * 10;

// 从数组取出一部分数据

// 截取10条数据

$result = array_slice($data, $offset, 10);

// 翻页

$page++;

// 放到数级组里

$arr = array (

'page'=> $page,

'items'=>$result

);

echo json_encode($arr);

// echo json_encode(array('page'=>$page, 'items'=>$result));

sleep(1);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值