JavaScript实现图片瀑布流和底部刷新


Posted in Javascript onJanuary 02, 2017

瀑布流现在基本上是图片显示网页的标配,主要是为了适配图片和文字块的大小,使显示出的效果没有那么呆板
实现这个功能首先要有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;
 }
}

效果图如下

JavaScript实现图片瀑布流和底部刷新

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

Javascript 相关文章推荐
js 点击按钮弹出另一页,选择值后,返回到当前页
May 26 Javascript
jQuery判断元素是否是隐藏的代码
Apr 24 Javascript
jquery统计复选框选中示例
Nov 05 Javascript
jQuery获得内容和属性示例代码
Jan 16 Javascript
php,js,css字符串截取的办法集锦
Sep 26 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
Node.js Express安装与使用教程
May 11 Javascript
JavaScript实现省市联动效果
Nov 22 Javascript
jQuery操作事件完整实例分析
Jan 10 jQuery
微信小程序学习总结(四)事件与冒泡实例分析
Jun 04 Javascript
一个例子轻松学会Vue.js
Jan 02 #Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 #Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 #Javascript
JavaScript cookie详解及简单实例应用
Dec 31 #Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 #Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
Dec 31 #Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
Dec 31 #Javascript
You might like
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
用python批量下载apk
2020/12/29 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
营销总经理的岗位职责
2013/12/15 职场文书
企业趣味活动方案
2014/08/21 职场文书
校园运动会广播稿
2014/10/06 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
普通党员个人整改措施
2014/10/27 职场文书
合同纠纷调解书
2015/05/20 职场文书
python 网络编程要点总结
2021/06/18 Python