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. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...

  2. 回收机制GC

    .NET 之 垃圾回收机制GC 一.GC的必要性 1.应用程序对资源操作,通常简单分为以下几个步骤:为对应的资源分配内存 → 初始化内存 → 使用资源 → 清理资源 → 释放内存. 2.应用程序对资源 ...

  3. java-类中需注意的问题

    1.对成员变量的操作只能放在方法中,方法可以对成员变量和该方法中声明的局部变量进行操作. 在声明类的成员变量时,可以同时赋予初值,例如: class Test { int a=12; float b= ...

  4. [洛谷P1417 烹调方案]贪心+dp

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second     ...

  5. hdu2204 Eddy's爱好 打表+容斥原理

    Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣.这些特殊数是这样的:这些数都能表示成M^K,M和K是 ...

  6. oracle使用flashback时,没有显示undosql

    这是因为oracle11g没有开启这个功能 用管理员用户sys(也就是sysdba)执行以下语句即可 alter databases add supplemental log data; 如果我们想恢 ...

  7. Python的itertools模块

    本章将介绍Python自建模块itertools,更多内容请参考:Python参考指南 python的自建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertool ...

  8. java 连接 hiveserver2 例子

    启动了  hiveserver2 以后才能使用 程序连接 .目前的 使用的 是  server2 版本.和以前的版本驱动包名不同: package hadoop; import java.sql.Co ...

  9. sql查询:存在A表而不在B表中的数据

    A.B两表,找出ID字段中,存在A表,但是不存在B表的数据. 方法一:使用 not inselect distinct A.ID from A where A.ID not in (select ID ...

  10. 一道Linux 面试题

    一个文本文件info.txt的内容如下:aa,201zz,502bb,1ee,42每行都是按照逗号分隔,其中第二列都是数字,请对该文件按照第二列数字从大到小排列 答案:cat info.txt|awk ...