本文实例分析了JS瀑布流实现方法。分享给大家供大家参考,具体如下:

描述:
1.每个图片宽度都一样,高度不一样
思路:
1.算出一共有几列(通过视窗总宽度/单个图片宽度得出)
2.根据一共几列*单个图片宽度,设置外围总宽度并水平居中(注:这个宽度应该是计算出来的,而不是定死,因为窗口大小会改变)
3.将第一行图片高度按顺序填充进数组
4.算出第一行图片里高度最短的那个,将第二行的第一张图片添加到其后(绝对定位),添加完第二行第一张,更新他的高度,然后重新计算最短,再开始之前的过程
5.鼠标在滑动滚轮时,继续加载新的图片(注:向上滚动不会加载,也不会一滚动就加载,而是向下滚动到一个临界值时才加载)
window.onload=function(){
waterfall('main','pin');
var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
window.onscroll=function(){
if(checkscrollside()){
var oParent = document.getElementById('main');// 父级对象
for(var i=0;i<dataInt.data.length;i++){
var oPin=document.createElement('div'); //添加 元素节点
oPin.className='pin'; //添加 类名 name属性
oParent.appendChild(oPin); //添加 子节点
var oBox=document.createElement('div');
oBox.className='box';
oPin.appendChild(oBox);
var oImg=document.createElement('img');
oImg.src='./images/'+dataInt.data[i].src;
oBox.appendChild(oImg);
}
waterfall('main','pin');
};
}
}
/*
parend 父级id
pin 元素id
*/
function waterfall(parent,pin){
var oParent=document.getElementById(parent);// 父级对象
var aPin=getClassObj(oParent,pin);// 获取存储块框pin的数组aPin
var iPinW=aPin[0].offsetWidth;// 一个块框pin的宽
var num=Math.floor(document.documentElement.clientWidth/iPinW); //每行中能容纳的pin个数【窗口宽度除以一个块框宽度】
oParent.style.cssText='width:'+iPinW*num+'px;margin:0 auto;';//设置父级居中样式:定宽+自动水平外边距
var pinHArr=[];//用于存储 每列中的所有块框相加的高度。
for(var i=0;i<aPin.length;i++){//遍历数组aPin的每个块框元素
var pinH=aPin[i].offsetHeight;
if(i<num){
pinHArr[i]=pinH; //第一行中的num个块框pin 先添加进数组pinHArr
}else{
var minH=Math.min.apply(null,pinHArr);//数组pinHArr中的最小值minH
var minHIndex=getminHIndex(pinHArr,minH);
aPin[i].style.position='absolute';//设置绝对位移
aPin[i].style.top=minH+'px';
aPin[i].style.left=aPin[minHIndex].offsetLeft+'px';
//数组 最小高元素的高 + 添加上的aPin[i]块框高
pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加了块框后的列高
}
}
}
/****
*通过父级和子元素的class类 获取该同类子元素的数组
*/
function getClassObj(parent,className){
var obj=parent.getElementsByTagName('*');//获取 父级的所有子集
var pinS=[];//创建一个数组 用于收集子元素
for (var i=0;i<obj.length;i++) {//遍历子元素、判断类别、压入数组
if (obj[i].className==className){
pinS.push(obj[i]);
}
};
return pinS;
}
/****
*获取 pin高度 最小值的索引index
*/
function getminHIndex(arr,minH){
for(var i in arr){
if(arr[i]==minH){
return i;
}
}
}
function checkscrollside(){
var oParent=document.getElementById('main');
var aPin=getClassObj(oParent,'pin');
var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);//创建【触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解决兼容性
var documentH=document.documentElement.clientHeight;//页面高度
return (lastPinH<scrollTop+documentH)?true:false;//到达指定高度后 返回true,触发waterfall()函数
}
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript图形绘制技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 瀑布流
# js实现的美女瀑布流效果代码
# javascript自适应宽度的瀑布流实现思路
# 解析瀑布流布局:JS+绝对定位的实现
# 原生JS实现响应式瀑布流布局
# js实现瀑布流的三种方式比较
# js实现仿百度瀑布流的方法
# javascript实现瀑布流自适应遇到的问题及解决方案
# javascript实现瀑布流加载图片原理
# 纯js实现瀑布流布局及ajax动态新增数据
# javascript瀑布流式图片懒加载实例解析与优化
# javascript瀑布流式图片懒加载实例
# 解析javascript瀑布流原理实现图片滚动加载
# 加载
# 遍历
# 最短
# 第一张
# 最小值
# 临界值
# 相关内容
# 鼠标
# 感兴趣
# 数据结构
# 给大家
# 更多关于
# 时才
# 所述
# 创建一个
# 程序设计
# 中能
# 再开
# 应该是
# 而不是
相关文章:
学校免费自助建站系统:智能生成+拖拽设计+多端适配
网站好制作吗知乎,网站开发好学吗?有什么技巧?
Swift开发中switch语句值绑定模式
Python lxml的etree和ElementTree有什么区别
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
制作农业网站的软件,比较好的农业网站推荐一下?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
XML的“混合内容”是什么 怎么用DTD或XSD定义
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何在Windows服务器上快速搭建网站?
如何在阿里云虚拟服务器快速搭建网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何在西部数码注册域名并快速搭建网站?
建站之星代理商如何保障技术支持与售后服务?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
,网页ppt怎么弄成自己的ppt?
南宁网站建设制作定制,南宁网站建设可以定制吗?
太平洋网站制作公司,网络用语太平洋是什么意思?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
黑客如何利用漏洞与弱口令入侵网站服务器?
网站制作公司,橙子建站是合法的吗?
如何快速搭建高效香港服务器网站?
网站制作的步骤包括,正确网址格式怎么写?
如何通过万网虚拟主机快速搭建网站?
如何在云虚拟主机上快速搭建个人网站?
广州建站公司哪家好?十大优质服务商推荐
专业网站建设制作报价,网页设计制作要考什么证?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
盐城做公司网站,江苏电子版退休证办理流程?
建站之星后台密码遗忘或太弱?如何重置与强化?
广东企业建站网站优化与SEO营销核心策略指南
建站之星多图banner生成与模板自定义指南
建站主机是否等同于虚拟主机?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
开心动漫网站制作软件下载,十分开心动画为何停播?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何通过VPS搭建网站快速盈利?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何在IIS中配置站点IP、端口及主机头?
青岛网站建设如何选择本地服务器?
开源网站制作软件,开源网站什么意思?
如何通过老薛主机一键快速建站?
如何有效防御Web建站篡改攻击?
威客平台建站流程解析:高效搭建教程与设计优化方案
临沂网站制作企业,临沂第三中学官方网站?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
IOS倒计时设置UIButton标题title的抖动问题
如何快速打造个性化非模板自助建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。