瀑布流现在基本上是图片显示网页的标配,主要是为了适配图片和文字块的大小,使显示出的效果没有那么呆板
实现这个功能首先要有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;
}
}
效果图如下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 瀑布流
# 底部刷新
# javascript实现瀑布流动态加载图片原理
# 瀑布流的实现方式(原生js+jquery+css3)
# 纯js实现瀑布流布局及ajax动态新增数据
# 解析javascript瀑布流原理实现图片滚动加载
# javascript瀑布流式图片懒加载实例解析与优化
# javascript瀑布流式图片懒加载实例
# javascript实现瀑布流加载图片原理
# 详解javascript实现瀑布流列式布局
# 详解javascript实现瀑布流绝对式布局
# js实现瀑布流的三种方式比较
# 加载
# 是在
# 放在
# 要有
# 设为
# 不能用
# 拉到
# 大家多多
# 标配
# 自适应
# 再写
# 是为了
# 实现了
# 不变形
# 配图
# container
# id
# img
# images
# box
相关文章:
建设网站制作价格,怎样建立自己的公司网站?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
Android滚轮选择时间控件使用详解
5种Android数据存储方式汇总
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
C++如何使用std::optional?(处理可选值)
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
安徽网站建设与外贸建站服务专业定制方案
Python多线程使用规范_线程安全解析【教程】
平台云上自助建站如何快速打造专业网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
建站之星安全性能如何?防护体系能否抵御黑客入侵?
制作农业网站的软件,比较好的农业网站推荐一下?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
深入理解Android中的xmlns:tools属性
如何选择高效可靠的多用户建站源码资源?
建站之星如何快速解决建站难题?
如何选择高效响应式自助建站源码系统?
建站之星伪静态规则如何正确配置?
如何快速搭建高效可靠的建站解决方案?
定制建站是什么?如何实现个性化需求?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站之星如何实现PC+手机+微信网站五合一建站?
常州自助建站费用包含哪些项目?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何快速搭建FTP站点实现文件共享?
图册素材网站设计制作软件,图册的导出方式有几种?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
建站主机默认首页配置指南:核心功能与访问路径优化
如何在万网主机上快速搭建网站?
建站主机选择指南:服务器配置与SEO优化实战技巧
宝塔新建站点为何无法访问?如何排查?
深圳网站制作培训,深圳哪些招聘网站比较好?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
制作网站公司那家好,网络公司是做什么的?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何用PHP工具快速搭建高效网站?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
已有域名如何快速搭建专属网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何零基础开发自助建站系统?完整教程解析
如何基于PHP生成高效IDC网络公司建站源码?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
小程序网站制作需要准备什么资料,如何制作小程序?
建站之星北京办公室:智能建站系统与小程序生成方案解析
*请认真填写需求信息,我们会在24小时内与您取得联系。