jQuery实现列表内容的动态载入特效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery实现列表内容的动态载入特效相关的知识,希望对你有一定的参考价值。

参考技术A 采用Jquery实现的列表数据动态更新效果,更新的数据可以是ajax请求的数据。
CSS:
.main

width:
100%;
margin-top:
100px;
text-align:
center;
font-size:
12.5px;

th,
td

border:
1px
solid
#ccc;
line-height:
40px;
padding-left:
5px;

.item:hover

background-color:
#efefef;

.item:nth-child(2n)

background-color:
#efefef;

.ListView

width:
600px;
overflow:
hidden;
margin:
0
auto;
padding:
10px;
height:372px;
border:
1px
solid
#dddddd;

.ListView
.c

width:
1200px;
margin:
0
auto;
border-collapse:
collapse;

.Item

border-bottom:
1px
dashed
#dddddd;
padding:
10px
0
10px
0;
overflow:
hidden;
margin-left:600px;

.Item
span

float:
left;
text-align:
left;

.Item
span:first-child

color:
#6AA8E8;

.Item
span:last-child

text-align:
center;

html
<div
class="main">
<div
class="ListView">
<div
class="c">
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
<div
class="Item">
<span>test</span>
<span>男/0</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>
</div>
</div>
</div>
<p
style="text-align:center;"><a
href="javascript:void(0);"
onClick="ListView.Update();">刷新数据</a></p>
JS
<script
type="text/javascript"
src="/js/jquery-1.8.0.min.js"></script>
<script
type="text/javascript">
$(function()
ListView.Init();
);
var
ListView=
Init:function()
$(".Item
span").css("width",$(".ListView").width()/4+"px");
for(var
i=0;i<$(".Item").length;i++)
var
target=$(".Item")[i];
$(target).animate(marginLeft:"0px",300+i*100);

,
Update:function()
$(".ListView
.c
.Item").remove();
for(var
i=0;i<10;i++)
var
newItem=$("<div
class=\"Item\">
<span>test</span>
<span>男/"+i+"</span>
<span>四川省,成都市,锦江区</span>
<span>详细说明</span>
</div>");
$(newItem).find("span").css("width",$(".ListView").width()/4+"px");
$(".ListView
.c").append(newItem);
$(newItem).animate(marginLeft:"0px",300+i*100);



</script>
附上演示效果
http://demo.jb51.net/js/2015/jquery-dtlb
效果是不是非常棒呢,接下来我们再来看看瀑布流的实现思路和js控制动态加载的代码
下面的代码主要是控制滚动条下拉时的加载事件的
在下面代码说明出,写上你的操作即可,无论是加载图片还是加载记录数据
都可以
别忘了引用jquery类库
$(window).scroll(function
()

var
scrollTop
=
$(this).scrollTop();
var
scrollHeight
=
$(document).height();
var
windowHeight
=
$(this).height();
if
(scrollTop
+
windowHeight
==
scrollHeight)

//此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
//var
page
=
Number($("#redgiftNextPage").attr('currentpage'))
+
1;
//redgiftList(page);
//$("#redgiftNextPage").attr('currentpage',
page
+
1);

);
解析:
判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。
scrollTop为滚动条在Y轴上的滚动距离。
clientHeight为内容可视区域的高度。
scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。
从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop
+
clientHeight
==
scrollHeight。(兼容不同的浏览器)。

jQuery页面滚动图片等元素动态加载实现

一、关于滚动显屏加载

常常会有这样子的页面,内容很丰富,页面很长,图片较多。比如说光棍节很疯狂的淘宝商城页面。
技术分享或者是前段时间写血本买了个高档耳机的京东商城页面,或者是新浪微博之类。

这些页面图片数量多,而且比较大,少说百来K,多则上兆。要是页面载入就一次性加载完毕。乖乖,估计黄花都变成黄花菜了。所以,我们得做点什么,避免这种糟糕的状况发生。目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的,随着页面的滚动,这个要显示图片的区域进入了浏览器可是窗口范围,则触发图片的加载显示。这种做法的好处是,一是页面加载速度快(浏览器转啊转的圈圈或是进度条很快就玩完了),二是节约了流量,因为不可能每个用户浏览页面时从头滚到尾的。

貌似我上面提到的几个站点就是采用的这种做法,例如,我以迅雷不及掩耳的速度从淘宝商城首页截下来的已触发滚动加载但是未加载完毕的图片。

这是提高前端性能,优化页面加载速度很实用的做法。看上去这种技巧有些技术门槛,其实很简单的。我们需要一个滚动事件,然后判断元素是否在浏览器窗口,然后,显示图片(或是其他元素)就可以啦。我在jQuery库下写了个实现此效果的插件,下面就将简单展示讲解此插件的使用以及滚动动态加载的实现。

二、jQuery滚动加载插件scrollLoading

虽然只有几十行代码,但是为了方便使用,我还是将其插件化了。插件名为jquery.scrollLoading.js,您可以狠狠地点击这里下载(右键 – [目标|链接]另存为),或是点击这里下载mini压缩版的。

demo
您可以狠狠地点击这里:jQuery滚动加载图片等demo,如果您的网速是在贫困线上挣扎,可以慢慢拖动滚动条,就可以很清楚的看到滚动加载的效果了;如果您的网速让你引以为豪,哥,你需要很快的拖动滚动条才能瞥见效果。效果类似下面:
技术分享

demo页面中似乎有段破坏和谐的HTML片段,那是动态加载HTML后的效果,也就是说,此scrollLoading不仅可以用来滚动加载图片,Ajax load页面什么的也是可以的。

三、scrollLoading使用

不管怎样,首先调用jQuery库文件,还有jquery.scrollLoading.js,您可以直接在页面的某处添上如下的代码:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="http://www.zhangxinxu.com/study/js/mini/jquery.scrollLoading-min.js"></script>

此插件的方法名就是scrollLoading,所以,直接:包装器.scrollLoading();就可以实现滚动加载效果了,简单的吧。如下:

$(".scrollLoading").scrollLoading();

表示所有class为scrollLoading的元素绑定了滚动加载的方法。
当然,不可能真的就如此简单,我们还需要做点小动作的。元素默认是不加载的,那么真正的加载地址显然要预先在元素上放置的,例如新浪微博默认把头像地址绑在了一个自定义的”dynamic-src”属性上,见下图:
技术分享

在HTML5中,以data-开头的自定义属性都是合法的,且地址可以是图片,页面等。所以,我设定了绑定地址的自定义属性为”data-url”,此属性值设为真实的图片(或页面)地址就可以了。例如下面:

<div class="scrollLoading" data-url="loaded.html">加载中...</div>

会在滚动时加载名为loaded.html的页面,并自动替换里面的内容。

对于常用的图片,还有一点小问题,就是其默认的src图片地址。其src地址不能是真实的图片地址(否则会直接一次性全部加载),也不能是空地址或是坏地址,否则IE浏览器下会出现很惊悚的红叉叉。技术分享。我的做法是默认链接的是一个1px * 1px的gif透明图片(大小很小),同时可以透出后面加载中gif动画图片,当滚动加载的时候直接把此gif图片替换掉。于是,对于图片,可能就有类似下面的代码:

<img class="scrollLoading" data-url="http://image.zhangxinxu.com/image/study/head/s180/1.jpeg" src="http://www.zhangxinxu.com/study/image/pixel.gif" width="180" height="180" style="background:url(http://www.zhangxinxu.com/study/image/loading.gif) no-repeat center;" />

四、scrollLoading可选参数

scrollLoading是个很简单很小的插件(无注释YUI compressor min版仅508B)见下表:

参数默认释义
attr data-url 获取元素加载地址的属性名

就这些了。
根据部分同行的要求,现增加两个可选参数,一个为container表示容器,另一个为callback表示回调。具体参见下表:

参数默认释义
attr data-url 获取元素加载地址的属性名
container $(window) 滚动的容器。默认为$(window),也就是默认的网页滚动。
callback $.noop 回调。元素动态加载完毕后执行的回调函数。其中回调函数的上下文this就是当前DOM元素。注意:如果无法获取元素加载地址,则不执行动态加载,但是会触发回调。在某些需求下,您可以缺省url值,仅仅触发回调。

 

新demo中绑定JavaScript代码如下:

$(".scrollLoading").scrollLoading({
    container: $("#zxxMainCon"),
    callback: function() {
        this.style.border = "3px solid #a0b3d6";	
    }
});








以上是关于jQuery实现列表内容的动态载入特效的主要内容,如果未能解决你的问题,请参考以下文章

jquery做一些小的特效

jquery 如何实现跨域载入其他网站的页面内容

动态填充 jQuery Mobile 列表视图内容

jQuery动画特效实例教程

jQuery动画特效实例教程

jQuery页面滚动图片等元素动态加载实现