zoukankan      html  css  js  c++  java
  • 瀑布流

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>瀑布流的三种实现方式</title>
      6     <style type="text/css">
      7         *{
      8             margin: 0;
      9             padding: 0;
     10         }
     11         img{
     12             display:block;
     13             width: 100%;
     14         }
     15         #main{
     16             position: relative;
     17         }
     18         .box{
     19             padding:15px 0 0 15px;
     20             float:left;
     21         }
     22         .pic{
     23             width:165px;
     24             padding:10px;
     25             border:1px solid #ccc;
     26             border-radius:5px ;
     27             box-shadow:0 0 5px #ccc;
     28         }
     29     </style>
     30 </head>
     31 <body>
     32     <div id="main">
     33         <!-- <div class="box">
     34             <div class="img"><img src="" alt=""></div>
     35         </div> -->
     36     </div>
     37 
     38     <!-- script -->
     39     <script type="text/javascript">
     40         var xmlhttp;
     41         if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
     42             xmlhttp=new XMLHttpRequest();
     43         }
     44         else{// code for IE6, IE5
     45             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
     46         }
     47           xmlhttp.onreadystatechange=function(){
     48               if (xmlhttp.readyState==4 && xmlhttp.status==200){
     49                   var data=xmlhttp.responseText;
     50                   console.log(typeof data);
     51                   var lists=eval(data);
     52                   //动态添加数据
     53                   var main=document.getElementById('main');
     54                   for(var i=0;i<lists.length;i++){
     55                       var box=document.createElement('div');
     56                       box.setAttribute('class','box');
     57                       var pic=document.createElement('div');
     58                       pic.setAttribute('class','pic');
     59                       var img=document.createElement('img');
     60                       img.setAttribute('src',lists[i].src);
     61                       pic.appendChild(img);
     62                       box.appendChild(pic);
     63                       main.appendChild(box);
     64                   }
     65                   waterfall('main','box');
     66               }
     67           };
     68         xmlhttp.open('GET','img.json');
     69         xmlhttp.send();
     70         function waterfall(parent,box){
     71             //将main下class为box的所有元素取出来
     72             var oParent=document.getElementById(parent);
     73             var oBoxs=getByClass(oParent,box);
     74             //获取图片的显示列数
     75             var oBoxWidth=oBoxs[0].offsetWidth;
     76             var cols=Math.floor(document.documentElement.clientWidth/oBoxWidth);
     77             //设置main的宽度与样式
     78             oParent.style.cssText=""+oBoxWidth*cols+"px;margin:0 auto;";
     79             var hArr=[];//存放每一列的高度
     80             for(var i in oBoxs){
     81                 if(i<cols){
     82                     hArr.push(oBoxs[i].offsetHeight);
     83                 }else{
     84                     var minHeight=Math.min.apply(null,hArr);//利用apply来改变this的指向来求最小值
     85                     var index=getMinHeightIndex(hArr,minHeight);
     86                     //给第一行外的所有元素家绝对定位
     87                     oBoxs[i].style.position="absolute";
     88                     oBoxs[i].style.top=minHeight+"px";
     89                     oBoxs[i].style.left=oBoxs[index].offsetLeft+"px";
     90                     //更新每一列的高度数据
     91                     hArr[index]+=oBoxs[i].offsetHeight;
     92                 }
     93             }
     94         }
     95         function getByClass(parent,className){
     96             var objElementsArr=[];
     97             oElements=parent.getElementsByTagName('*');//获取parent下的所有元素
     98             for(var i in oElements){
     99                 if(oElements[i].className==className){
    100                     objElementsArr.push(oElements[i]);
    101                 }
    102             }
    103             return objElementsArr;
    104         }
    105         function getMinHeightIndex(arr,val){
    106             for(var i in arr){
    107                 if(arr[i]==val){
    108                     return i;
    109                 }
    110             }
    111         }
    112     </script>
    113 </body>
    114 </html>

    瀑布流

    Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。

  • 相关阅读:
    《相约星期二》--[美]米奇·阿尔博姆
    《把信送给加西亚》--[美]阿尔伯特·哈伯德
    《少有人走的路:心智成熟的旅程》--[美]M·斯科特·派克
    《穷爸爸和富爸爸》--[美]罗伯特·清崎,[美]莱希
    Error This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. T
    C#轻量级高性能日志组件EasyLogger
    我们为何要跳槽
    Grid++Report报表工具C/S实战篇(五)
    .NET 开源Protobuf-net从入门到精通
    怎样防止ddos攻击
  • 原文地址:https://www.cnblogs.com/lcddjm/p/5724387.html
Copyright © 2011-2022 走看看