js实现瀑布流加载(数据加载以及图片加载)

一、数据的瀑布流加载

在这里插入图片描述

<script>
    //模拟数据
    var stulist = [];
    var nowPage=1;
    var pageNum=10;
    var totle=Math.ceil(stulist.length/pageNum);

    var parEle=null;
    window.onload=function (){
        parEle=document.getElementsByClassName("content")[0];
        //加载完成之后默认显示一页数据
        var data=returnData(nowPage,pageNum);
        renderData(data);

        //添加滚动事件
        parEle.onscroll=function (){
            if(this.clientHeight+this.scrollTop>=this.scrollHeight-5)
            {
                //开始加载另一页的数据显示到页面
                nowPage++;
                if(nowPage>totle)
                {
                    return;
                }
                var data=returnData(nowPage,pageNum);
                renderData(data);
            }
        }
    }

    /*
    * 每次返回对应的数据
    * */
    function  returnData(now,num){
        return stulist.slice((now-1)*num,now*num);
    }
    /*
    * 动态渲染数据到元素的内部
    * */
    function renderData(info){
        var str="";
        for(var i=0;i<info.length;i++)
        {
            str+="<div><span>"+info[i].name+"</span><span>"+info[i].age+"</span><span>"+info[i].sex+"</span><span>"+info[i].tel+"</span><span>"+info[i].address+"</span><span>"+info[i].des+"</span></div>";
        }
        parEle.innerHTML+=str;
    } 
</script> 

二、图片瀑布流加载

在这里插入图片描述

<script>
    //容器块 右下边距5px,不等高不等宽,父容器内间距左右10px
    //动态计算生成几个li,每行等高,宽度不定
    var sw;
    var parBox;
    var navParent;
    //假设图片全在集合里面
    var imageList=[
        {src: '1.jpg', w: 500, h: 313},
        {src: '2.jpg', w: 500, h: 453},
        {src: '3.jpg', w: 500, h: 334},
        {src: '4.jpg', w: 500, h: 388},
        {src: '5.jpg', w: 500, h: 634},
        {src: '6.jpg', w: 500, h: 364},
        {src: '7.png', w: 421, h: 750}
    ];
    var rowsCount=[6,7,8];
    //定义当前行的高变量
    var rowsHeight;
    var maright=5;
    var height;
    var show=4;
    window.onload=function(){
        //获取屏幕的尺寸
        sw=document.documentElement.clientWidth-20;
        parBox=document.getElementById("par-box");
        navParent=document.getElementsByClassName("nav")[0];
        parBox.style.width=sw+"px";
        for(var i=0;i<show;i++){
            createDom();
        }
        document.body.onscroll=function(){
            if(this.scrollY+document.documentElement.clientHeight>=document.body.scrollHeight-5){
                createDom();
            }
        }
    }
    //dom元素创建
    function createDom(){
        var all=0;
        var count=rowsCount[Math.floor(Math.random()*rowsCount.length)];
        var liarr=[];
        var imgarr=[];
        var self=[];
        for(var i=0;i<count;i++){
            var liele=document.createElement("li");
            liele.className="li-item";
            var img=document.createElement("img");
            var imginfo=randomImg();
            img.src="./img/"+imginfo.src;
            liele.appendChild(img);
            navParent.appendChild(liele);
            var imgbili=imginfo.w/imginfo.h;
            console.log(imginfo.w);
            all+=imgbili;
            //向数组添加元素
            self.push(imgbili);
            liarr.push(liele);
            imgarr.push(img);
        }
        rowsHeight=(sw-count*maright)/all;
        for(var i=0;i<liarr.length;i++){
            imgarr[i].style.height=rowsHeight+"px";
            imgarr[i].style.width=self[i]*rowsHeight+'px';
            liarr[i].style.height=rowsHeight+'px';
            liarr[i].style.width=self[i]*rowsHeight+'px';
        }

    }
    //生成图片的方法
    function randomImg(){
        var index=Math.floor(Math.random()*imageList.length);
        return imageList[index];
    }
</script> 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南初️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值