javascript瀑布流效果

<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <title>瀑布流演示</title>
  <link rel="stylesheet" type="text/css" href="pubu_css.css"/>
  <script language="javascript" type="text/javascript" src="pubu_js.js"></script>
 </head>
 <body>
    <div id="container">
      
      <div class="box">
         <div class="box_img"><img src="img/1.jpg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/2.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/3.jpg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/4.jpg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/5.jpg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/6.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/7.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/8.jpeg"></div>
      </div>
      
      <div class="box">
         <div class="box_img"><img src="img/9.jpg"></div>
      </div>

    </div>
</body>
</html>

window.onload=function(){
    imgLocation("container","box");

    //使用json字符串模拟数据
    var imgData={"data":[{"src":"2.jpeg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpeg"}]};

    //监听滚动条
    window.onscroll=function(){
        if(checkFlag()){
           //动态加载数据
           var cparent=document.getElementById("container");
           for(var i=0;i<imgData.data.length;i++){
               //创建div
               var ccontent=document.createElement("div");
               ccontent.className="box";
               cparent.appendChild(ccontent);
               var boximg=document.createElement("div");
               boximg.className="box_img";
               ccontent.appendChild(boximg);
               var img=document.createElement("img");
               img.src="img/"+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;
    if(lastContentHeight<scrollTop+pageHeight){
        return true;
    }
}

//获得屏幕有多少个图片,即获得多少个div
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;
        //console.log(BoxHeightArr[i]);打印所有盒子的高度
        }else{
            var minheight=Math.min.apply(null,BoxHeightArr);//得到最小的
            //设置其css属性
            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=[];//将所有内容存入一个数组
    var allcontent=parent.getElementsByTagName("*");
    for(var i=0;i<allcontent.length;i++){
        if(allcontent[i].className==content){
            contentArr.push(allcontent[i]);//将取出的内容放入数组
        }
    }
    return contentArr;
}
时间: 2024-10-11 12:52:56

javascript瀑布流效果的相关文章

【前端】用jQuery实现瀑布流效果

jQuery实现瀑布流效果 何为瀑布流: 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格. 瀑布流的应用: 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内获得更多的信息量,而瀑布流里懒加载模式又避免了用户鼠标点击的翻页操作,瀑布流的主要特性便是错落有致,定宽而不

javascript瀑布流代码实例

javascript瀑布流代码实例:现在瀑布流效果大行其道,各种网站都有应用,尤其是专业的图片类型的网站,本站在特效下载专区也有此应用,当然实现此效果的方法有多种,下面是一段瀑布流代码实例供大家参考. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title&

jQuery+HTML5图片瀑布流效果

JavaScript与HTML5实现美女瀑布流布局,本方法是把图片的路径写在了JS的数组里,不过重点好像不是在这里,而是在图片如何自动排列的问题,你可以运行本实例后,点击“加载瀑布流布局”按钮,即可看到图片的瀑布流排列效果,现在很流行这个,希望您从本代码中能找到一些灵感. <!DOCTYPE HTML> <html> <head> <title>jQuery+HTML5图片瀑布流效果丨河北电动叉车|石家庄苗木</title> <style

Jquery瀑布流效果(下篇)

接着上篇瀑布流效果说(上篇地址为http://www.cnblogs.com/jiaojiaome/articles/4123586.html). 第一个文件myself实现了瀑布流的效果,但是存在可以优化的地方. 比如initial方法,第一次刚加载的时候调用initial方法从第一张慢慢布局是没有问题的. but,后面拖动滚动后,如果满足条件,继续加载其他的,加载毕后再次调用initial()方法, 这里是可以优化的,因为之前的元素已经布局好了,不需要重新布局.所以可以从后面的元素开始 本篇

利用JS实现简单的瀑布流效果

哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了, 虽然中间非常的坎坷, 并不是一帆风顺但是最终我还是实现了个简单的效果, 下面就为大家简单的介绍下, 不知道的友友们, 有兴趣的话, 可以来参考下, 欢迎指出缺点和不足! 一.瀑布流之准备工作   首先声明下, 为了方便演示和联系, 我使用的是本地图片, 如果大家有需要的话可以尝试着写下网络的,

自定义实现带文字标题的瀑布流效果

在网上能找到的大部分资料中的瀑布流效果都是单纯的照片实现,现在我来实现一个带文字标题的.效果如下: 每个item都是由图片和文字标题两部分组成. 布局方式为ScrollView里面嵌套一个水平方向的LinearLayout,里面再嵌套两个竖直方向的LinearLayout,然后判断竖直方向的两个LinearLayout的高度,向比较低的那个Linearlayout里面添加item. 下面是代码 <ScrollView xmlns:android="http://schemas.androi

瀑布流效果的一些收获

瀑布流效果已经流行了很久,之前在项目中做了一次,今天页面改版又做了一次瀑布流的效果,中间又有了一些收获,谨记于此. 这个瀑布流效果是借鉴的网上一位大神写的代码,然后正好在项目中得到了应用. 1 function waterFall(mr, mb) { //mr水平方向的间距,mb垂直方向的间距 2 var ocontainer = document.getElementById("container"); 3 if (ocontainer) { 4 var pageWidth = oc

一步步教你js原生瀑布流效果实现

一步步教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一张挨着一张竖直排列 4.鼠标向下滚动,一直不停的加载图片 5.浏览器的宽度改变,图片的列数会进行相应的更改 那么这种效果类似现实生活中的瀑布,所以我们叫它瀑布流的效果. Js原生瀑布流效果的实现 从上述分析中,我们可以把整个效果分为以下四个部分: html+css界面搭建 瀑布流效果 浏览器向下滚动

一种瀑布流效果的实现

最近一个项目使用到了瀑布流效果,在这里总结一下.使用jquery框架. 最终效果: 思路: 使用五个并列的div:     首次加载n条数据:     之后由scroll触发ajax数据加载:     加载每条数据时,判断5个div的高度,把数据加载到高度最短的div里. 数据加载代码: $(document).bind('scroll',(function(){     //离底部100px时触发加载     var closeToBottom = ($(window).scrollTop()