欢迎大家参考我的瀑布流,小白推荐

首先,了解一下什么是瀑布流(以下为百度百科):又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。最早采用此布局的网站是Pinterest,逐渐在国内流行开来。国内大多数清新站基本为这类风格。

接下来是我自己的语言,菜鸟前端,大家多多包容也请大家多多的指教!!

说是参差不齐,实际上也只是高度上的差异,若高宽都是随意的,那么难度是非常非常大的。所以,我们能的瀑布是固定宽而auto height的。

同时,由于同数据库里的大量图片文字信息在一起,不可能一次性载出来,不说用户可以从在等到晚,从开启你的网页到直接关闭,所以瀑布流还有一个特点就是,懒加载!(稍微提及一下)——单我们需要新数据的时候加载新数据,在瀑布流中,当我们的滚轮碰到底的时候加载新图片!

以下的内容不涉及响应式布局,若有兴趣的朋友可以先自己看看,等我下次写博客为大家带来bootstrap框架,很好用的一个东西。

 <div id="wrap">
        <div>
            <img src="">
            <a href="">标题</a>
        </div>
        <div>
            <img src="">
            <a href="">标题</a>
        </div>
        <div>
            <img src="">
            <a href="">标题</a>
        </div>
        <div>
            <img src="">
            <a href="">标题</a>
        </div>
       <!--数量尽量多一些,毕竟没有达到有滚轮,很难开始瀑布形成-->
 </div>
* {
    margin: 0;
    padding: 0;
    border: none;
}
body {
    background: #ddd;
}
img {
    border: none;
}
a {
    text-decoration: none;
    color: #444;
}
a:hover {
    color: #999;
}

/* Wrap */
#wrap {
    position: relative;
    width: auto;
    height: auto;
    margin: 0 auto;
}
#wrap>div {
    float: left;
    box-sizing: border-box;
    width: 280px;
    height: auto;
    margin: 10px;
    padding: 10px;
    border-radius: 5px;
    background: #fff;
}
#wrap>div>img {
    width: 100%;
}
#wrap>div>a {
    display: block;
    font-size: 18px;
    font-weight: bold;
    line-height: 40px;
    text-align: center;
}

上一套html和css先,接下来我们开始js,先从js入手,转jquery更加的方便。

function waterfall(wrap, boxes) {
    //获取屏幕显示的列数
    var boxWidth = boxes[0].offsetWidth + 20;
    var windowWidth = document.documentElement.clientWidth;
    var colsNumber = Math.floor(windowWidth / boxWidth);

    // 设置瀑布容器的宽度
    wrap.style.width = boxWidth * colsNumber + 'px';

    // 定义一个数组并存储每一列的高度
    var everyHeight = new Array();
    for (var i = 0; i < boxes.length; i++) {
        if (i < colsNumber) {
            everyHeight[i] = boxes[i].offsetHeight + 20;
            //因为第一行沾满了,我们往下排顺序,需要往高度最小的插入,把孔隙补上,开始//
            定位
        } else {

            var minHeight = Math.min.apply(null, everyHeight);
		//这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只
		//需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去

            var minIndex = getIndex(minHeight, everyHeight);
				
            var leftValue = boxes[minIndex].offsetLeft - 10;
            boxes[i].style.position = 'absolute';
            boxes[i].style.top = minHeight + 'px';
            boxes[i].style.left = leftValue + 'px';
            everyHeight[minIndex] += boxes[i].offsetHeight + 20;
        };
    }
}

//获取最小列的索引
function getIndex(minHeight, everyHeight) {
    for (index in everyHeight) {
        if (everyHeight[index] == minHeight) {
            return index;
        };
    };
};

//传参
window.onload = function() {
    var wrap = document.getElementById('wrap');
    var boxes = wrap.getElementsByTagName('div');
    waterfall(wrap, boxes);
}

瀑布流的布局到此,结束,但是,瀑布不停歇,所以还有一个关键特效,也就是我们上面说的懒加载,也是滚动加载。

也就是我们的追加盒子效果

window.onmousewheel = function(ev){
  var next=document.documentElement.clientHeight+document.documentElement.scrollTop+200;
 if(aaa > document.documentElement.scrollHeight){
        // 追加盒子;需要后台数据,或者自己写的数据
   		使用append,到这里也差不多了,以布局为基础,添加盒子由朋友你来完成了。
   		上头的+200可以不用,直接相等,即到达底部,执行追加盒子
   }

        }

有缘的话,在我下一期博客见面吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值