js图片瀑布流效果
要实现图片瀑布流效果,首先得准备几张图片。
html的部分比较简单就是将图片加载到浏览器就可以了
代码如下(注意放的图片多一点要不然之后无法滑动鼠标就无法达到瀑布流效果):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>pool</title>
<link rel="stylesheet" type="text/css" href="style2.css">
<script src="js/app.js"></script>
</head>
<body>
<div id="container">
<div class="box">
<div class="box_img">
<img src="1.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="8.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="3.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="4.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="5.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="6.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="7.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="10.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="10.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="10.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="1.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="4.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="6.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="3.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="6.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="3.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="6.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="3.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="6.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="3.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="9.jpg">
</div>
</div>
<div class="box">
<div class="box_img">
<img src="2.jpeg">
</div>
</div>
</div> </body>
</html>
style2.css代码如下:
*{
margin: 0px;/*外边距*/
padding: 0px; /*内边距 */
}
#container{
position: relative;/*相对布局*/
}
.box{
padding: 5px;
float: left;/*向左浮动*/
}
.box_img{
padding: 5px;
border: 1px solid #cccccc;/*边框*/
box-shadow: 0 0 5px #cccccc;
border-radius: 5px;
}
.box_img img{
width: 150px;
height: auto;
}
app.js代码如下(灵魂):
window.onload = function (){
imgLocation("container","box");
//准备的照片
var imgData = {"data":[{"src":"10.jpg"},{"src":"9.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"7.jpg"}]};
window.onscroll=function(){
//鼠标滑轮一滑就加载图片实际上就是将图片添加到html中
//就是添加下面东西到html中,src变化
/*<div class="box">
<div class="box_img">
<img src="8.jpg">
</div>
</div>
*/
if(checkOut()){
//因为html是树结构的
var cparent=document.getElementById("container");
for(var i=0;i<imgData.data.length;i++){
//分别创建2个div和一个img
var boxDiv = document.createElement("div");
var boxImgDiv = document.createElement("div");
var Img = document.createElement("img");
//给创建的节点添加与之前再html直接写出的图片区域一样的属性
boxDiv.className = "box";
boxImgDiv.className = "box_img";
Img.src = imgData.data[i].src;
//确定添加节点的位置(你创建的节点的父母是谁)
cparent.appendChild(boxDiv);
boxDiv.appendChild(boxImgDiv);
boxImgDiv.appendChild(Img);
}
//按照之前的照片排列规则
imgLocation("container","box");
}
}
}
function checkOut() {
var ccontent=[];
var cparent=document.getElementById("container");
ccontent=getChildElement(cparent,"box");
var lastTopheight= ccontent[ccontent.length-1].offsetTop;//最后一张照片距离最上面的高度(大于液面高度)
var scrollTop = document.documentElement.scrollTop;//滚轮滑动的长度
var pageHeight = document.documentElement.clientHeight||document.body.clientHeight;//页面高度
//console.log(lastTopheight+":"+scrollTop+":"+pageHeight);
//当滑到最后一张图片准备开始加载准备的图片
//判定条件就是页面高度加上鼠标滑轮滑动大于最后一张图片距离最上面的高度(等于就是刚准备刷到最后一张照片)
if(pageHeight+scrollTop>lastTopheight){
return true;
}
}
function imgLocation(parent,content){
var cparent=document.getElementById(parent);//先获得的container节点
var ccontent=getChildElement(cparent,content);
//console.log(ccontent);
var imgWidth=ccontent[0].offsetWidth;
var WindowWidth=document.documentElement.clientWidth;
var num=Math.floor(WindowWidth/imgWidth);//浏览器一横行所放图片的数量
cparent.style.cssText = "width:"+Math.floor(num*imgWidth)+"px;margin:0 auto";
// console.log(num);
// console.log(ccontent.length);
var boxHeightArr=[];
for(var i=0;i<ccontent.length;i++){
if(i<num){
boxHeightArr[i]=ccontent[i].offsetHeight;
//console.log(boxHeightArr[i]);
}else{
var minHeight= Math.min.apply(null,boxHeightArr);//找到数组最小的高度
// console.log(minHeight);
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 getChildElement(parent,content) {
var allContent=[];
allContent=parent.childNodes;//parent.getElementsByTagName("*");(注释掉的是视频中讲的)
var contentArr = new Array();
for(var i=0;i<allContent.length;i++){
if(allContent[i].className==content){
contentArr.push(allContent[i]);
}
}
return contentArr;
}
function getminHeightLocation(boxHeightArr,minHeight){
for(var i=0;i<boxHeightArr.length;i++){
if(boxHeightArr[i]==minHeight){
return i;
}
}
}
效果展示(滑轮向下滑永远滑不到尽头):

js图片瀑布流效果的更多相关文章
- js 图片瀑布流效果实现
/** * Created by wwtliu on 14/9/5. */$(document).ready(function(){ $(window).on("load",fun ...
- js 实现图片瀑布流效果,可更改配置参数 带完整版解析代码[waterFall.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片瀑布流效果 页面需求 1 ...
- 手把手教你js原生瀑布流效果实现
手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...
- 利用LruCache载入网络图片实现图片瀑布流效果(改进版)
PS: 2015年1月20日21:37:27 关于LoadImageAsyncTask和checkAllImageViewVisibility可能有点小bug 改动后的代码请參见升级版本号的代码 ht ...
- JS+PHP瀑布流效果(二)
<!-- 加载商品 --><script> //用户拖动滚动条,达到底部时ajax加载一次数据 var loading = $("#loading&quo ...
- JS+PHP瀑布流效果
miai.php,代码如下: $link = mysql_connect("localhost","root",""); //连接数据库 $ ...
- 原生js实现瀑布流效果
参考此篇:https://segmentfault.com/a/1190000012621936 以下为个人测试中: css: .masonry{ width:100%; } .item{ posit ...
- 使用JS实现图片展示瀑布流效果
不知大家有没有发现,一般的图片展示网站都会使用瀑布流效果,所谓的瀑布流 就是网站内的图片不会一下子全缓存出来,而是等你滚动到一定的距离的时候, 下面的图片才会继续缓存,并且图片也是随机出现的,只是宽度 ...
- js实现瀑布流加载图片效果
今天学习了一个瀑布流加载效果,很多网站都有瀑布流效果,瀑布流就是很多产品显示在网页上,宽相同,高度不同,表现为多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.原理是:1. ...
随机推荐
- 查看svn 提交记录
svn log -v -r {2019-8-11}:{2019-8-16} -l 30 | sed -n '/wangyue01/,/--$/ p'其中:-r {2018-9-10}:{2018-9- ...
- vue 路由传参 以及获取参数
1.通过query实现: <router-link :to="{ name:'home',query:{id:1} }">跳转页面</router-link> ...
- 【PAT甲级】1099 Build A Binary Search Tree (30 分)
题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...
- 【PAT甲级】1080 Graduate Admission (30 分)
题意: 输入三个正整数N,M,K(N<=40000,M<=100,K<=5)分别表示学生人数,可供报考学校总数,学生可填志愿总数.接着输入一行M个正整数表示从0到M-1每所学校招生人 ...
- Draw.io--自认为最好用的流程图绘制软件
draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标.支持Github,Google Drive, One drive等网盘同步,并且永久免费.如果觉得使用Web ...
- python 处理html文本的中文字符gbk转utf-8
#中文字符gbk转utf-8 def gbk2utf8(self,raw): rs=raw.encode('raw_unicode_escape') #转为机器识别字符串 s=repr(rs) ss= ...
- Fedora以root用户自动登陆
目录 Fedora以root用户自动登陆 参考 配置自动登陆 Fedora以root用户自动登陆 Fedora Workstation Version: 31
- SQL Server 作业的备份
轉發:https://www.cnblogs.com/Amaranthus/archive/2012/06/25/2561569.html 作业备份,不是备份数据库,是备份作业. DECLARE @j ...
- 「JSOI2012」玄武密码
「JSOI2012」玄武密码 传送门 题目是要求多个串在母串上的最长匹配长度. 考虑 \(\text{AC}\) 自动机,我们建出 \(\text{Trie}\) 图然后用母串来在上面跑. 每一个能匹 ...
- 将jar包安装到本地Maven仓库
1.安装jar包到本地仓库 mvn install:install-file -Dfile=F:\jiefu\lib\alipay-sdk-java20170324180803.jar -Dgroup ...