全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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;
 }
}

效果图如下

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# 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小时内与您取得联系。