效果
各div宽度一样,高度由内容撑开。所有div紧密排列在一起,效果如下:
点击在线预览
参考
学习了慕课网上的瀑布流布局课程,参考实现了一下,做个总结。
课程地址:http://www.imooc.com/learn/101
步骤
- 先获取第一行中各div高度,保留在数组中,作为各列初始高度。假设一排有
n
个div
- 获取各列高度的最小项(数组最小项),将第
n+1
个div移动到高度最低的列的下方
- 高度最低的列的高度(数组对应的项)加上第
n+1
个div的自身高度,n++
- 重复步骤2,直到所有div排序完毕
图片中1,2,3…是对应div元素在html文档中的排列顺序。
核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
function waterfall(oDivs,divWidth,columnNum) { var columnHeightList = []; var targetIndex = 0; for (i = 0; i < oDivs.length; i++) { var mydiv = oDivs[i]; if (i < columnNum) { columnHeightList.push(mydiv.offsetHeight); mydiv.style.cssText = 'position:relative;float:left;'; } else { targetIndex = columnHeightList.indexOf(Math.min.apply(null, columnHeightList));
mydiv.style.cssText = 'position:absolute'; mydiv.style.left = targetIndex * divWidth + 'px'; mydiv.style.top = columnHeightList[targetIndex] + 'px';
columnHeightList[targetIndex] += mydiv.offsetHeight; } } }
|
图片无限加载
思路是检测当前屏幕滚动的高度
和浏览器窗口高度
之和 跟 最低图片的具页面顶部高度
比较,满足一定条件便加载图片。
1 2 3 4 5 6 7 8 9 10 11 12 13
| window.onscroll = function() { var lastDiv = oDivs[oDivs.length - 1]; var lastDivTop = lastDiv.offsetTop; var lastDivHeight = lastDiv.offsetHeight; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var bodyHeight = document.documentElement.clientHeight;
if ((scrollTop + bodyHeight) > (lastDivTop + lastDivHeight / 2)) { } }
|
小结
- 在js中设置元素样式记得加单位
- 后续会实现JS动画版和CSS3版本