JavaScript日记——实现图片的瀑布流和底部刷新

瀑布流现在基本上是图片显示网页的标配,主要是为了适配图片和文字块的大小,使显示出的效果没有那么呆板
实现这个功能首先要有html,css和js基础

首先先实现瀑布流

即下一行的图片放在上一行的凹下去的地方

基本的html代码如下

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流</title>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <!--script不能用<script/>-->
    <script src="js/app1.js"></script>
</head>
<body>
<div id="container">
    <div class="box">
        <div class="img_box">
            <img src="images/1.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/2.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/3.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/4.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/5.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/6.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/1.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/2.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/3.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/4.jpg">
        </div>
    </div>
    <div class="box">
        <div class="img_box">
            <img src="images/5.jpg">
        </div>
    </div>
</div>
</body>
</html>

然后再写一下css

*{
    margin: 0px;
    padding: 0px;
}
/*container为相对布局*/
#container{
    position:relative;
}
/*box向左浮动*/
.box{
    padding:5px;
    float: left;
}
/*加一些边框*/
.img_box{
    padding: 5px;
    border:1px solid #ccc;
    box-shadow:0 0 5px #ccc;
    border-radius: 5px;
}
/*宽度固定,高度自适应,使图片不变形*/
.img_box img{
    width: 150px;
    height: auto;
}

接下来就是这次的核心,写js

//开始加载要执行的方法
window.onload=function(){
    imgLocation("container","box")
}
function imgLocation(parent,content){
    var cparent=document.getElementById(parent);
    var ccontent=getChildElement(cparent,content)
    //图片宽度
    var imgWidth=ccontent[0].offsetWidth;
    //每一行图片个数
    var cols= Math.floor(document.documentElement.clientWidth/imgWidth);
    //使宽度一定,内容居中
    cparent.style.cssText="width:"+imgWidth *cols+"px;margin:0 auto";

    var BoxHeightArr=[];
    for(var i=0;i<ccontent.length;i++){
        //获取第一行图片的高度
        if (i<cols){
            BoxHeightArr[i]=ccontent[i].offsetHeight;
        }else {
            //Math.min对数组要加上apply
            var minheight=Math.min.apply(null,BoxHeightArr);
            var minIndex=getminheightLocation(BoxHeightArr,minheight)
            //设为绝对布局使内容不随屏幕大小改变
            ccontent[i].style.position="absolute";
            ccontent[i].style.top=minheight+"px";
            ccontent[i].style.left=ccontent[minIndex].offsetLeft+"px";
            //该列的高度加上后添加进去图片高度
            BoxHeightArr[minIndex]=BoxHeightArr[minIndex]+ccontent[i].offsetHeight

        }
    }
}
//获取最小高度的位置
function getminheightLocation(BoxHeightArr,minHeight){
    for(var i in BoxHeightArr){
        if (BoxHeightArr[i]==minHeight){
            return i;
        }
    }
}
function getChildElement(parent,content){
    var contentArr=[];
    //获取所有子Element
    var allcontent=parent.getElementsByTagName("*")
    for(var i=0;i<allcontent.length;i++){
        //如果className是box就添加进去
        if (allcontent[i].className==content){
            contentArr.push(allcontent[i]);
        }
    }
    return contentArr
}

这样就简单实现了瀑布流效果

接下来是下拉到底部自动刷新

主要是在滚动时监听是否到底部,到达差不多底部的位置就加载
添加以下代码即可

window.onscroll=function(){
    //模拟数据
    var imgData={"data":[{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"}]}
    if (checkFlag()){
        var cparent=document.getElementById("container");
        for(var i =0;i<imgData.data.length;i++){
            var ccontent=document.createElement("div");
            ccontent.className="box";
            cparent.appendChild(ccontent);
            var boximg=document.createElement("div");
            boximg.className="img_box";
            ccontent.appendChild(boximg);
            var img=document.createElement("img");
            img.src="images/"+imgData.data[i].src;
            boximg.appendChild(img);
        }
        //按照之前规则排列
        imgLocation("container","box")
    }
}
function  checkFlag(){
    var cparent=document.getElementById("container");
    var ccontent=getChildElement(cparent,"box");
    //最后一张图片距离顶部距离
    var lastContentHeight=ccontent[ccontent.length-1].offsetTop;
    //当前距离
    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
    //该页面显示的高度
    var pageHeight=document.documentElement.clientHeight||document.body.clientHeight;
    //如果差不多到达底部则返回true
    if (lastContentHeight<scrollTop+pageHeight){
        return true;
    }
}

效果图如下

效果图

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Hbuilder 中实现图片瀑布流,可以使用循环代码结合 CSS 样式来实现。具体步骤如下: 1. 在 HTML 文件中创建一个容器,用于存放瀑布流中的图片,如下所示: ``` <div class="waterfall-container"> <!-- 这里用循环代码动态生成图片 --> </div> ``` 2. 在 CSS 文件中设置容器的样式,包括宽度、边距等: ``` .waterfall-container { width: 100%; margin: 0 auto; } ``` 3. 在 JavaScript 文件中使用循环代码动态生成图片,并为图片设置样式,包括宽度、高度、边距等。具体代码如下: ``` // 图片数据,用于循环生成图片 var imgData = [ "image1.jpg", "image2.jpg", "image3.jpg", // ...更多图片地址 ]; // 循环生成图片 for (var i = 0; i < imgData.length; i++) { var imgSrc = imgData[i]; var img = document.createElement("img"); img.src = imgSrc; // 设置图片样式 img.style.width = "100%"; // 图片宽度 img.style.height = "auto"; // 图片高度自适应 img.style.margin = "10px"; // 图片边距 // 将图片添加到容器中 document.querySelector(".waterfall-container").appendChild(img); } ``` 4. 最后,为了实现瀑布流的效果,可以使用 CSS 的 column-count 属性,将容器中的图片分成多列。具体代码如下: ``` .waterfall-container { width: 100%; margin: 0 auto; column-count: 3; /* 将容器中的图片分成 3 列 */ column-gap: 20px; /* 列与列之间的间距 */ } ``` 以上就是使用循环代码在 Hbuilder 中实现图片瀑布流的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值