jQuery瀑布流技术封装并制作插件
来源:互联网 发布:php死循环怎么办 编辑:程序博客网 时间:2024/05/29 13:40
瀑布流布局,其实是一种绝对定位(absolute)布局.
原理分析:
1.html,css结构 : 子绝父相
<body>
<div class="items">
<div class="item"><img src="#"></div>
<div class="item"><img src="#"></div>
<div class="item"><img src="#"></div>
...
</div>
</body>
2.给每一个子元素进行top,left设置定位
/*需求1:设置原始数据
一排元素个数n : items的宽度/item的宽度 向下取整
间隙margin: (items的宽度-n*item的宽度)/(n+1)
一排元素的总高度集合topArr: 长度为n 元素为对应item的高度 初始值都为margin
需求2:设置第一排dom元素位置
需求2.1:修改topArr里面元素的值
*/
var itemWidth = $('.item').width();
var n =Math.floor($('.items').width() /itemWidth);
var margin = ($('.items').width() -n *itemWidth) / (n +1);
var topArr = [];
for (vari =0;i < n; i++) {
topArr[i] =margin;
$('.item').eq(i).css({
top: topArr[i],
left: (margin +itemWidth) *i +margin
});
topArr[i] +=$('.item').eq(i).height();
}
/*需求3:判断topArr中最小值及index,依次将后面的item元素放在其后面
需求3.1:每次放置后,修改topArr里面元素的值*/
for (vari =n;i < $('.item').length;i++) {
var minH =Infinity;
var minIndex = -1;
for (varj =0;j < n; j++) {
if (topArr[j] <minH) {
minH = topArr[j];
minIndex = j;
}
}
$('.item').eq(i).css({
top: minH,
left: (margin +itemWidth) *minIndex +margin
});
topArr[minIndex] +=$('.item').eq(i).height();
}
/*需求4:设置父容器高度*/
var maxH = -Infinity;
for(vari=0;i<n;i++){
if(topArr[i]>maxH){
maxH = topArr[i];
}
}
$('.items').height(maxH);
$.fn.extend({
waterfall: function () {
/*this指向调用该函数的jQuery对象*/
var itemWidth =this.children().width();
var n =Math.floor(this.width() /itemWidth);
var margin = (this.width() -n *itemWidth) / (n +1);
var topArr = [];
for (vari =0;i < n; i++) {
topArr[i] =margin;
this.children().eq(i).css({
top: topArr[i],
left: (margin +itemWidth) *i +margin
});
topArr[i] +=this.children().eq(i).height();
}
for (vari =n;i < this.children().length;i++) {
var minH =Infinity;
var minIndex = -1;
for (varj =0;j < n; j++) {
if (topArr[j] <minH) {
minH = topArr[j];
minIndex = j;
}
}
this.children().eq(i).css({
top: minH,
left: (margin +itemWidth) *minIndex +margin
});
topArr[minIndex] +=this.children().eq(i).height();
}
var maxH = -Infinity;
for(vari=0;i<n;i++){
if(topArr[i]>maxH){
maxH = topArr[i];
}
}
this.height(maxH);
/*返回this,也是jQuery链式编程的逻辑*/return this;
}
})
$('.items').waterfall();
$(window).resize(function () {
$('.items').waterfall();
});
阅读全文
0 0
- jQuery瀑布流技术封装并制作插件
- jQuery制作瀑布流
- jquery瀑布流插件
- 封装jquery,自己制作插件
- jQuery 瀑布流插件: Wookmark
- jquery瀑布流插件(WookMark)
- Jquery瀑布流插件wookmark
- jQuery瀑布流插件 Masonry
- jQuery插件之-Wookmark瀑布流插件
- jQuery插件之-瀑布流插件
- jQuery插件之-Wookmark瀑布流插件
- jQuery插件之-Wookmark瀑布流插件
- jQuery插件之-瀑布流插件
- 利用JQuery制作一个瀑布流
- jQuery制作幻灯片之封装插件
- jquery瀑布流插件Endless Scroll
- jquery瀑布流插件-在线demo预览
- jQuery网格布局瀑布流插件Freewall
- MYSQL学习笔记(三)过滤数据
- 浅谈C++ 字符串类 —— string类
- laravel5.4 迁移数据库 出错(一)
- /*Oracle 增加、删除、修改*/
- PCA主成分分析推导
- jQuery瀑布流技术封装并制作插件
- Varnish的基础配置
- MYSQL学习笔记(四)高级数据过滤
- shell 中的for循环while循环和case语句
- ZOJ 3469 Food Delivery [区间DP]
- 【python】条件语句和循环语句
- HTML基础进阶
- python对文件的操作方式总结
- HTML相对路径和绝对路径