在”同学代码“中运行,浏览器的clientWidth获取不到
开始写的是:
var broW = document.documentElement.clientWidth ;
取不到值。
后来改成:
var broW = document.documentElement.clientWidth ||document.body.clientWidth;
还是取不到值,刷新也不行,注意是在”同学代码“中看自己的代码,点运行,取不到
我写的源码如下
<!Doctype>
<html>
<head>
<title>瀑布流布局</title>
<meta charset="utf-8" />
<style>
*{padding: 0;margin:0;}
#main{
position: relative
}
.box{
padding: 15px 0 0 15px;
float:left;
}
.pic{
padding: 10px;
border:1px solid #ccc;
box-shadow: 0 0 6px #ccc;
border-radius: 5px;
}
.pic img{
width:162px;
height:auto;
}
</style>
</head>
<body>
<div id="main">
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edadad0001efe202000070.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad8c000175cb00300029.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad3e0001afad10000318.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad2c0001b61310000314.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad1600019ae910000310.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad54000119fb03300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad690001260a03300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad7a0001cde803300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edacdd0001b8e804820302.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edadad0001efe202000070.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad8c000175cb00300029.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad2c0001b61310000314.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad1600019ae910000310.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad54000119fb03300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad690001260a03300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad7a0001cde803300130.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edacdd0001b8e804820302.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edadad0001efe202000070.jpg" />
</div>
</div>
<div class="box">
<div class="pic">
<img src="http://img1.sycdn.imooc.com//53edad8c000175cb00300029.jpg" />
</div>
</div>
</div>
<script type="text/javascript">
window.onload=function(){
// 调用瀑布流函数,传入两个参数,main块和每张图片所在的box块
wallFall("main","box");
var dataInt = {
'data':[
{'src':'0.jpg'},
{'src':'1.jpg'},
{'src':'2.jpg'}
]
};
// 判断是否可以加载数据
window.onscroll = function(){
if(checkPic()){
for(var i=0;i<dataInt.data.length;i++)
{
var oParent = document.getElementById('main');
// 创建父层div,box、pic
var box = document.createElement("div");
box.className = "box";
oParent.appendChild(box);
var pic = document.createElement("div");
pic.className = "pic";
box.appendChild(pic);
var im = document.createElement("img");
im.src = "images/"+dataInt.data[i].src;
pic.appendChild(im);
}
wallFall("main","box");
}
}
}
// 瀑布流函数
function wallFall(parent,box){
var oParent = document.getElementById(parent);
var boxArr = getByClass(oParent,"box");
// 获取浏览器一行可以容纳的图片个数
var picW = boxArr[0].offsetWidth;
var broW = document.documentElement.clientWidth ||document.body.clientWidth;
var num = Math.floor(broW/picW);
alert(broW);
//alert(num);
// 固定main(oParent)的宽度,居中显示
oParent.style.cssText = "width:"+(picW*num)+"px;margin:0 auto;";
// 存储第一行6张图片高度,找出最小的那个
var oH = new Array();
for(var i=0;i<boxArr.length;i++){
if(i<num){
oH[i] = boxArr[i].offsetHeight;
}else{
// 找到num个高度中最小的一个,将下一张图片插到下方,更新oH数组中的值
var oMin = Math.min.apply(null,oH);
var ind = getIndex(oH,oMin);
boxArr[i].style.position = "absolute";
boxArr[i].style.top = oMin+"px";
//console.log("oH[ind].offsetLeft"+oH[ind].offsetLeft);
boxArr[i].style.left = picW*ind+"px";
oH[ind] += boxArr[i].offsetHeight;
}
}
}
function getByClass(parent,clsName){
var boxArr=new Array(),
oElements=parent.getElementsByTagName('*');
for(var i=0;i<oElements.length;i++){
if(oElements[i].className==clsName){
boxArr.push(oElements[i]);
}
}
return boxArr;
}
//获取数组中值为value的下标
function getIndex(arr,value){
for(var i=0;i<arr.length;i++)
{
if(arr[i] == value)
return i;
}
return -1;
}
function checkPic(){
var oMain = document.getElementById("main");
var oBoxs = getByClass(oMain,"box");
//console.log(oBoxs.length);
// 获取页面滚动的高度+页面高度
// document.body/documentElement.scrollHeight表示浏览器所有内容的高度
// document.body/documentElement.scrollTop 浏览器滚动部分高度
var broScrH = document.body.scrollTop || document.documentElement.scrollTop;
// clientHeight浏览器可视区高度
var broH = document.body.clientHeight || document.documentElement.clientHeight;
var bro = broScrH+broH;
var lastPic_broH = oBoxs[oBoxs.length - 1].offsetTop;
var lastPicH = oBoxs[oBoxs.length - 1].offsetHeight;
var pic = lastPic_broH+(lastPicH/2);
return bro>=pic?true:false;
}
</script>
</body>
</html>
<!-- 求值在数组中的索引,arr接收的是数组,val接收的是判断的值-->
<!--function getMinhIndex(arr,val){}-->