原生js写的瀑布流

这里只写了js和css方法,大家有兴趣可以动手写写

*{
    margin:0;
    padding:0;
}
#.container{
 position: relative;
}
.box{
    float: left;
    padding: 5px;
}
//主要是加了边框效果
.img_box{
    padding: 5px;
    border: 1px solid #cccccc;
    box-shadow: 0 0 5px #cccccc;
    border-radius: 5px;
}
img{
width: 150px;
height: auto;//高度自适应
}
 window.onload = function(){
   waterFull('container','box');
   var dataInt={'data':[{'src':'1.jpeg'},{'src':'2.jpeg'},{'src':'3.jpeg'},{'src':'4.jpeg'}]};//这里只是模拟数据库传的数据
   window.scroll = function(){
    if(checkscroll()){
      var oParent = document.getElementById('container');// 父级对象
      for(var i=0;i<dataInt.data.length;i++){
       var child = document.createElement('div'); //添加 元素节点
       child.className = 'box';//添加元素的属性名
       oParent.appendChild(child);//追加到父级对象
      for(var i=0;i<dataInt.data.length;i++){
       var child_img = document.createElement('div'); //添加 元素子节点
       child_img.className = 'img_box';
       child.appendChild(child_img);
       var img = document.createElement('img');
        img.src='images/'+dataInt.data[i].src;
         child_img.appendChild(img);
      }
      waterFull('container','box'); 
    }
   }
 }

 function waterFull(parent,pin){
   var oparent = document.getElementById(parent);
   var content = getClassObj(oparent,pin);
   var apinW = content[0].offsetWidth;//获取到图片的宽度
   var num = Math.floor(document.documentElement.clientWidth/apinW)//这里也可以使用document.body.clientWidth(涉及到兼容性问题), Math.floor向下取整
   oparent.style.cssText='width:'+apinW*num+'px;margin:0 auto;';
   var imagesArry = [];//图片高度集合
   for(var i=0;i<content.length;i++){
    var apinH = content[i].offsetHeight;
    if(i<num){
       imagesArry[i] = apinH;//拿到第一行每个图片的高度
    }else{
        var minH=Math.min.apply(null,imagesArry);//拿到数组imagesArry中的最小值minH
        var minHIndex=getminHIndex(imagesArry,minH);
        //给后面的图片依次排到每一行最小高度的盒子下面
        content[i].style.position = 'absolute';
        content[i].style.top = minH+'px';
        content[i].style.left = content[minHIndex].offsetLeft+'px';
        imagesArry[minHIndex]+=content[i].offsetHeight;//更新添加了图片后的列高
    }
   }
 }

//获取到所有图片,并放在一个数组中
 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;
 }


//获取最小高度图片的下角标
function getminHIndex(arry,min){
    for(var i= 0;i<arry.length;i++){
      if(arry[i]==min){
        return i;
      }
    };
    return pinS;
 }

//判断何时该加载图片资源了
 function checkscroll(){
   var oParent=document.getElementById('container');
   var content = getClassObj(oparent,'box');
   var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解决兼容性
   var documentH=document.documentElement.clientHeight;//页面可视高度
   var lastpinH = content[content.length-1].offsetTop;
   if(lastpinH<scrollTop+documentH){
     return true
   }
   else{
    return false
   }

 } 


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0. 写在前面 当你开始工作时,你不是在给你自己写代码,而是为后来人写代码。 —— Nichloas C. Zak...
    康斌阅读 10,752评论 1 42
  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 11,779评论 0 16
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,692评论 1 92
  • 随感 不知道别人的生活是否也是如此:一会儿天昏地暗,感觉已经没了活路,信誓旦旦发了最毒的誓言;一会又雨过天晴,仿佛...
    雨水这天读书阅读 1,477评论 0 0
  • 注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。 本篇文章内容来自于夯实JAV...
    Amy_LuLu__阅读 8,649评论 0 2

友情链接更多精彩内容