wap端经常会遇到产品或者评论的加载,但是分页的体验不是很好,所以选择通过js实现瀑布流加载方式。

第一步:需要动态加载的主要内容,这里需要动态加载的是li标签的内容

<ul class="back_ullist p20 back_ullist1" id="ulcontent">
<li class="clearfix solidB_gray1 pb15 mb15" id="@item._id.ToString()">
<div class="clearfix">
<ul class="star_wk gl clearfix fr mt5">
<li><img src="http://simg.xx.com.cn/custom/week/images/star1.png" width="30" height="30" alt="" /></li>
<li><img src="http://simg.xx.com.cn/custom/week/images/star.png" width="30" height="30" alt="" /></li>
</ul>
<a href="javascript:" class="fl">
<img class="photo_style mr10 " src="@user.headimgurl" width="117" height="117" alt="" />
</a>
<a class="fl f14 name_wk lh30 oe" href="#">@user.nickname</a>
</div>
<div class="cb pt10 gray9 f12">
@item.content
</div>
</li>
</ul>

第二步:检测页面位置

 // 判断滚动条是否到底部
function checkscrollside() {
var arrBox = $('#ulcontent').children('li');
//获取最后一个瀑布流块的高度:距离网页顶部(实现未滚到底就开始加载)
var lastBoxH = arrBox.eq(arrBox.length - 1).offset().top;
var scrollTop = $(window).scrollTop()//获取滚动条卷走的高度
var documentH = $(window).height();;//显示页面文档的高
return (lastBoxH < scrollTop + documentH) ? true : false;//到达指定高度后 返回true,触发waterfall()函数
}

第三步:动态异步加载内容,每次追加5调数据

   // 数据插入
function addDate() {
var lastid = $("#ulcontent>li:last").attr("id");
//console.log("获取ID" + lastid);
$.ajax({//注意同步加载数据设置
url: "@Url.Content("~/WeClass/LoadEvaluate")", async: false, type: "POST", data: { 'classId': '@Model.Id', 'lastId': lastid, 'count': 1 }, dataType: "json", success: function (msg) { $.each(msg, function (index, val) {
var star1="";
var star2="";
for (var i = 1; i <= val.score; i++)
{
star1+='<li><img src="http://simg.instrument.com.cn/custom/week/images/star1.png" width="30" height="30" alt="" /></li>';
}
for (var i = 1; i <= 5 - val.score; i++)
{
star2 += '<li><img src="http://simg.instrument.com.cn/custom/week/images/star.png" width="30" height="30" alt="" /></li>';
}
//var ulcontent = $("#ulcontent").innerHeight(); $("#ulcontent").append('<li class="clearfix solidB_gray1 pb15 mb15" id="' + val._id + '" >' +
'<div class="clearfix">' +
'<ul class="star_wk gl clearfix fr mt5">' + star1 + star2+'</ul>'+
'<a href="javascript:" class="fl">'+
'<img class="photo_style mr10 " src="'+val.headimgurl+'" width="117" height="117" alt="" />'+
'</a>'+
'<a class="fl f14 name_wk lh30 oe" href="javascript:">'+val.nickname+'</a>'+
'</div>'+
'<div class="cb pt10 gray9 f12">' + val.content + ' </div>' +
'</li>');
});
console.log(msg);
if (msg.length > 0)
{
var conheight = $("#ulcontent").height();
$("#ulcontent").height(conheight + 100);
}
}
});
}

第四步:后台根据自己的业务返回对应格式的json数据

省略。。。

第五步:动态设置元素的高度宽度

//主函数
function waterfall() {
var arrBox = $('#ulcontent').children('li');// box对象
var iBoxW = arrBox.eq(0).width();// 获取瀑布流块的宽度,注意width(),跟innerWidth()的区别
var num =Math.floor($(window).width() / iBoxW);//计算窗口能容纳几列
$('#ulcontent').css('width', iBoxW * num);//设置父级宽度
var arrBoxH = [];//数组,用于存储每列中的所有块框相加的高度
for (var i = 0; i < arrBox.length; i++) {//遍历数组瀑布流 块
var boxH =arrBox.eq(i).innerHeight();//获取当前块的高度
if (i < num) {
arrBox.eq(i).attr('style', '');//防止用户改变窗口大小,到时样式出错
arrBoxH[i] = boxH; //第一行中的num个块box 先添加进数组arrBoxH
} else {
var minH = Math.min.apply(null, arrBoxH);//获取数组arrBoxH中的最小值minH
var minHIndex = $.inArray(minH, arrBoxH);//使用jquery提供的工具
//arrBox.eq(i).css({ 'position': 'absolute', 'top': minH, 'left': minHIndex * iBoxW });//设置定位
arrBoxH[minHIndex] += arrBox.eq(i).innerHeight();//添加后,更新最小列高
}
}
}

第六步:动态检测是否加载流数据

 $(function () {
waterfall();
////改变窗口大小时,重新排列
$(window).resize(function(){
waterfall();
});
//如果数据不够,没出现滚动条,自动加载数据
var time = setInterval(function () {
if (checkscrollside()) {
addDate();//插入数据
waterfall();//加载完数据从新排列
} else {
clearInterval(time);
$(window).scroll(function () {
if (checkscrollside()) {
addDate();
waterfall();
};
})
}
}, 1000); });

WAP用户评论简单实现瀑布流加载的更多相关文章

  1. js图片加载效果(延迟加载+瀑布流加载)

    概述 两种图片加载的效果:一种是遇到图片较多时,带读条效果的加载提示:另一种是根据滑块的位置进行预加载,用户不察觉的情况下,实现瀑布流的加载效果 详细 代码下载:http://www.demodash ...

  2. js实现瀑布流加载图片效果

    今天学习了一个瀑布流加载效果,很多网站都有瀑布流效果,瀑布流就是很多产品显示在网页上,宽相同,高度不同,表现为多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.原理是:1. ...

  3. css3多列布局瀑布流加载样式

    看了一些网站的瀑布流加载,正好看到css3的多列属性,尝试着写了一个css做布局的瀑布流. 直接上代码: <!DOCTYPE html> <html lang="en&qu ...

  4. ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项

    首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...

  5. jQuery ajax瀑布流加载静态的列表页面

    1.加载一行数据 <script> //滚动加载事件 var Loadurl = "{$url}"; if(window.location.href !== Loadu ...

  6. [JS] 瀑布流加载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. 利用JS实现简单的瀑布流效果

    哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了 ...

  8. 一个简单的AMD模块加载器

    一个简单的AMD模块加载器 参考 https://github.com/JsAaron/NodeJs-Demo/tree/master/require PS Aaron大大的比我的完整 PS 这不是一 ...

  9. CAD从二进流加载数据(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::ReadBinStreamEx 从二进流加载数据,详细说明如下: 参数 说明 IMxDrawBinStream* pBinStream ...

随机推荐

  1. ZOJ 1005:Jugs(思维)

    Jugs Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In the movie "Die Har ...

  2. 从MySQL和MongoDB的对比,看SQL与NoSQL的较量

    张家江,网易乐得高级工程师. 贵金属(注:贵金属为笔者部门业务)的行情系统提供的接口通过Redis获取数据,目前使用Redis最多只存储了大概8000条左右的分钟k的行情数据,考虑到将来可能会有更大数 ...

  3. UTF-8 Invalid Byte Sequences

    Chances are, some of you have run into the issue with the invalid byte sequence in UTF-8 error when ...

  4. centos7 添加第三方源

    第三方源下载地址: http://repoforge.org/use/ 选择合适自己包 我选择的是EL7的 wget 下载这个包 接着使用rpm -ivh 包名 确认是否添加成功 ls /etc/yu ...

  5. 快速挂载iso文件到虚拟机系统

    在vm软件菜单栏那里选择vm,再选择弹出菜单最下面的设置,如图,找到实体机上的iso文件,保存. 这时候,在虚拟机ls /dev会发现有一个cdrom,这个就是我们的iso文件,不过我们还需要把它挂载 ...

  6. MySQL--Checkpoint基础

    ===================================================== Checkpint 分两种:Sharp Checkpoint : 在服务器正常关闭时,将所有 ...

  7. Singer 学习十 同步模式

    sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...

  8. TypeScript 之 JSX

    https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/JSX.html JSX中,类型断言必须使用as操作符. 类型检查 ...

  9. java zip 压缩文件

    zip压缩:ZipOutputStream.ZipFile.ZipInputStream 三个类的作用 一段 java  zip  压缩的代码: File dir = new File("C ...

  10. Xshell配置SSH免密码登录

    思路: 私钥存放于客户端,id_rsa 将客户端公钥存放于要远程控制服务器上:将客户在公钥id_rsa.pub内容追加到 /root/.ssh/authorized_keys 使用密钥认证分3步: 1 ...