jQuery无限载入瀑布流 【转载】
转载至 http://wuyuans.com/2013/08/jquery-masonry-infinite-scroll/
jQuery无限载入瀑布流
好久没更新日志了,一来我比较懒,二来最近也比较忙,惭愧啊。这次我要写的是关于瀑布流网页布局的方法,在网页布局中瀑布流算比较新颖的方式,最近我也试了一下,把本站的电影资源独立出来做了一个子站。因为电影都是以海报形式展示的,图片会比较多,瀑布流应该会比较合适,最后的完成品在这里:Wuyuan's Movie。使用jQuery实现,用到三个插件:Masonry、Infinite Scroll和imagesLoaded。
1.Masonry
Masonry是一款网页布局插件,能帮你自动排列网页元素,比如div和li,我这里使用li来放电影资源。
Masonry主页:http://masonry.desandro.com/
github项目:https://github.com/desandro/masonry
用法很简单,在他主页里有例子。
var $container = $('#container');
// initialize
$container.masonry({
columnWidth:200,//每列的宽度,不设就按第一个计算
itemSelector:'.item',//需要排列的元素
gutter:20,//每列的间隙
});
2.Infinite Scroll
Infinite Scroll是一款自动载入的插件,当滚动条靠近底部时会自动读取下一页的元素,并添加到相关容器里,配合Masonry实现无限载入。
Infinite Scroll主页:http://www.infinite-scroll.com/
github项目:https://github.com/paulirish/infinite-scroll
用法也很简单,我这里列举一些常用的参数。
$('.selector').infinitescroll({
//导航所在容器
navSelector:"div.navigation",
//导航中下一页的链接地址
nextSelector:"div.navigation a:first",
//需要添加的新元素
itemSelector:"div.post",
//动画效果
animate:false,
//动画效果长度
extraScrollPx:150,
//导航条到底部的距离
pixelsFromNavToBottom:200,
},
function( newElements ){
//添加新元素
})
);
很多文章中都说extraScrollPx是触发加载的滚动条剩余长度,但我改了该值后没什么反应,后来看了代码才发现这个只是动画效果触发是滚动条向下滚动的距离而已,真正可以触发加载的是下面这个pixelsFromNavToBottom,他表示导航栏到底部的距离,infinitescroll会在下拉到导航栏附近触发自动加载,也就是当滚动条剩余长度小于pixelsFromNavToBottom这个值时触发加载。后面那个函数是读取到新元素的加载函数,需要和Masonry配合,我将在下面讲到。
3.imagesLoaded
在用Masonry加载图片时会出现一个问题,因为图片的加载比较慢,Masonry会读取不到图片的高度而错误的计算元素的高度,这样就会使布局重叠。解决办法就是在图片全部加载后再使用Masonry布局,这就要用到imagesLoaded这个插件,在低版本jQuery中他是内置的函数,现在已经独立出来作为一个插件调用了。
imagesLoaded主页:http://desandro.github.io/imagesloaded/
github项目:https://github.com/desandro/imagesloaded
$('#container').imagesLoaded(function(){
// images have loaded
});
4.实际应用
将上面三个插件组合到一起就可以做出无限加载的瀑布流了,下面以我的子站为例子说一下。我所有资源使用ul和li来组织,如下。
<ulid="masonry">
<liclass="box"></li>
<liclass="box"></li>
<liclass="box"></li>
</ul>
<divid="npage"><ahref="http://movie.wuyuans.com/2.html">下一页</a></div>
下一页的链接在#npage中,下面是js代码。
<scripttype="text/javascript"src="/static/jquery-1.7.1.js"></script><scripttype="text/javascript"src="/static/masonry.pkgd.min.js"></script><scripttype="text/javascript"src="/static/jquery.infinitescroll.min.js"></script><scripttype="text/javascript"src="/static/imagesloaded.pkgd.min.js"></script><scripttype="text/javascript">$(function(){var $container = $('#masonry');$container.imagesLoaded(function(){$container.masonry({columnWidth:235,itemSelector:'.box',gutter:20});});$container.infinitescroll({navSelector :"#npage",nextSelector :"#npage a",itemSelector :".box",pixelsFromNavToBottom:300},function( newElements ){//首先隐藏var $newElems = $( newElements ).css({ opacity:0});$newElems.imagesLoaded(function(){//布局时显示$newElems.animate({ opacity:1});$container.masonry('appended', $newElems,true);});});});</script>
jQuery无限载入瀑布流 【转载】的更多相关文章
- jquery实现无限滚动瀑布流实现原理
现在类似于pinterest这类的表现效果很火,其实我比较中意的是他的布局效果,而不是那种瀑布流. 虽然我不是特别喜欢这种瀑布流的表现样式,但是还是写了几篇关于无限滚动瀑布流效果的文章,Infinit ...
- jQuery动态网格瀑布流插件Masonry
Masonry是一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发瀑布流界面效果.和CSS中float的效果不太一样的地方在于,float先水平排列,然后再垂直排列,使用Masonr ...
- jQuery淡入淡出瀑布流效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jquery插件实现瀑布流
jquery插件实现瀑布流<!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...
- Jquery实现图片瀑布流思路-简单版
目录 Jquery实现图片瀑布流思路-简单版 1.预备 2.开始 1.声明 2.主体 3.窗体大小改变事件 Jquery实现图片瀑布流思路-简单版 注意:本篇文章基于知道每张图片的实际尺寸的情况下 特 ...
- 基于jQuery的简易瀑布流实现
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- Masonry + Ajax 实现无限刷新瀑布流
效果就如我的个人站yooao.cc,把我实现的思路分享给大家. Masonry渲染页面如果有图片时需要imagesLoaded辅助,不然有可能会造成布局重叠. 一个大体的思路:前端取得最后一篇文章的i ...
- jQuery插件之-瀑布流插件
jquery.wookmark.js 一个实现瀑布流自适应宽度布局的jQuery插件—jquery.wookmark.js , wookmark使用非常简单到只需要一句代码就能实现,除此之外,当页面宽 ...
- jquery练习之瀑布流
最近有空简单学习了下瀑布流,写完后想和大家一起分享下,但我知道我的代码有很多缺陷不足,希望多多包涵.(纯属兴趣非专业学习人士) 众所周知,瀑布流大概分为2种,一种是浮动式的瀑布流,一种是定位式的瀑布流 ...
随机推荐
- 一文搞懂js中的typeof用法
基础 typeof 运算符是 javascript 的基础知识点,尽管它存在一定的局限性(见下文),但在前端js的实际编码过程中,仍然是使用比较多的类型判断方式. 因此,掌握该运算符的特点,对于写出好 ...
- selenium2.x 与 selenium3.x 最大区别
一.selenium2.x 与 selenium3.x 最大区别 (1) 从3.0版本selenium开始使用火狐浏览器完成web自动化就需要用到驱动包了. (2) 而2.0版本的selenium使用 ...
- 『学了就忘』Linux基础命令 — 35、网络中与其他机器通信的命令
目录 1.write命令 2.wall命令 3.mail 命令 使用1:发送邮件 使用2:查看已经接收的邮件 使用3:发送文件内容 1.write命令 (1)write命令的基本信息 命令名称:wri ...
- hudi clustering 数据聚集(一)
概要 数据湖的业务场景主要包括对数据库.日志.文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题: 1.为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下 ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- oracle 与 前台 md5
创建函数: CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BE ...
- RabbitMQ Network Partitions 处理策略
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 网络分区的意义 RabbitMQ的模型 ...
- vue2与vue3的差异(总结)?
vue作者尤雨溪在开发 vue3.0 的时候开发的一个基于浏览器原生 ES imports 的开发服务器(开发构建工具).那么我们先来了解一下vite Vite Vite,一个基于浏览器原生 ES i ...
- [luogu5665]划分
暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$(然后可以各种优化到$o(n^2)$,但这不需要)输出f[i][j], ...
- littlevgl架构浅析
一. littlevgl有几个线程,作用是什么? 三个,主线程一个,和在主线程的hal_init函数中创建的另两个sdl线程. 主线程完成一系列初始化工作后,循环每10ms调用在lv_init函数 ...