zoukankan      html  css  js  c++  java
  • 面向对象之瀑布流效果

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title></title>
      6         <style type="text/css">
      7             *{
      8                 margin: 0;
      9                 padding: 0;
     10             }
     11             html,body{
     12                 width: 100%;
     13                 height: 100%;
     14                 
     15             }
     16             #main{
     17                 position: relative;   /*所有的盒子相对他来定位 的*/        
     18                 width:1212px;
     19                 margin: 0 auto;
     20             }
     21             .box{
     22                 padding:15px 0 0 15px; /* 要获取每列高度 =  图片和图片之间的距离*/
     23                 float: left;  /*块级元素水平排列*/
     24             }
     25             .pic{
     26                 padding: 10px;
     27                 border: 1px solid #CCCCCC;
     28                 border-radius: 5px;
     29                 box-shadow: 0 0 5px #CCCCCC; /*水平  垂直   阴影模糊程度   颜色*/
     30             }
     31             .pic img{
     32                 width:165px;
     33                 height: auto;
     34             }
     35         </style>
     36          
     37     </head>
     38     <body>
     39         <div id="main">
     40             <div class="box">
     41                 <div class="pic">
     42                     <img src="images/0.jpg" />
     43                 </div>
     44             </div>
     45             <div class="box">
     46                 <div class="pic">
     47                     <img src="images/1.jpg" />
     48                 </div>
     49             </div>
     50             <div class="box">
     51                 <div class="pic">
     52                     <img src="images/2.jpg" />
     53                 </div>
     54             </div>
     55             <div class="box">
     56                 <div class="pic">
     57                     <img src="images/3.jpg" />
     58                 </div>
     59             </div>
     60             <div class="box">
     61                 <div class="pic">
     62                     <img src="images/4.jpg" />
     63                 </div>
     64             </div>
     65             <div class="box">
     66                 <div class="pic">
     67                     <img src="images/5.jpg" />
     68                 </div>
     69             </div>
     70             <div class="box">
     71                 <div class="pic">
     72                     <img src="images/6.jpg" />
     73                 </div>
     74             </div>
     75             <div class="box">
     76                 <div class="pic">
     77                     <img src="images/7.jpg" />
     78                 </div>
     79             </div>
     80             <div class="box">
     81                 <div class="pic">
     82                     <img src="images/8.jpg" />
     83                 </div>
     84             </div>
     85             <div class="box">
     86                 <div class="pic">
     87                     <img src="images/9.jpg" />
     88                 </div>
     89             </div>
     90             <div class="box">
     91                 <div class="pic">
     92                     <img src="images/10.jpg" />
     93                 </div>
     94             </div>
     95             <div class="box">
     96                 <div class="pic">
     97                     <img src="images/19.jpg" />
     98                 </div>
     99             </div>
    100             <div class="box">
    101                 <div class="pic">
    102                     <img src="images/11.jpg" />
    103                 </div>
    104             </div>
    105             <div class="box">
    106                 <div class="pic">
    107                     <img src="images/12.jpg" />
    108                 </div>
    109             </div>
    110             <div class="box">
    111                 <div class="pic">
    112                     <img src="images/13.jpg" />
    113                 </div>
    114             </div>
    115             <div class="box">
    116                 <div class="pic">
    117                     <img src="images/14.jpg" />
    118                 </div>
    119             </div>
    120             <div class="box">
    121                 <div class="pic">
    122                     <img src="images/15.jpg" />
    123                 </div>
    124             </div>
    125             <div class="box">
    126                 <div class="pic">
    127                     <img src="images/16.jpg" />
    128                 </div>
    129             </div>
    130             <div class="box">
    131                 <div class="pic">
    132                     <img src="images/17.jpg" />
    133                 </div>
    134             </div>
    135             <div class="box">
    136                 <div class="pic">
    137                     <img src="images/18.jpg" />
    138                 </div>
    139             </div>
    140             <div class="box">
    141                 <div class="pic">
    142                     <img src="images/20.jpg" />
    143                 </div>
    144             </div>
    145             <div class="box">
    146                 <div class="pic">
    147                     <img src="images/21.jpg" />
    148                 </div>
    149             </div>
    150             <div class="box">
    151                 <div class="pic">
    152                     <img src="images/22.jpg" />
    153                 </div>
    154             </div>
    155             <div class="box">
    156                 <div class="pic">
    157                     <img src="images/23.jpg" />
    158                 </div>
    159             </div>
    160             <div class="box">
    161                 <div class="pic">
    162                     <img src="images/24.jpg" />
    163                 </div>
    164             </div>
    165             <div class="box">
    166                 <div class="pic">
    167                     <img src="images/25.jpg" />
    168                 </div>
    169             </div>
    170             <div class="box">
    171                 <div class="pic">
    172                     <img src="images/26.jpg" />
    173                 </div>
    174             </div>
    175             <div class="box">
    176                 <div class="pic">
    177                     <img src="images/27.jpg" />
    178                 </div>
    179             </div>
    180             <div class="box">
    181                 <div class="pic">
    182                     <img src="images/28.jpg" />
    183                 </div>
    184             </div>
    185             <div class="box">
    186                 <div class="pic">
    187                     <img src="images/29.jpg" />
    188                 </div>
    189             </div>
    190             <div class="box">
    191                 <div class="pic">
    192                     <img src="images/30.jpg" />
    193                 </div>
    194             </div>
    195         </div>
    196     </body>
    197 </html>
    198 <script src="./common.js"></script>
    199 <script>
    200     window.onload = function(){
    201         var wf = new WaterFall()
    202         wf.init().fnScroll();
    203     }
    204     function WaterFall(){
    205         //实例属性
    206         this.main = $id("main");//大容器
    207         this.boxs = this.main.children;//所有图片
    208         this.boxW = this.boxs[0].offsetWidth;//一个图片宽度
    209     }
    210     
    211     WaterFall.prototype = {
    212         init : function(){ //入口
    213             //定义一个数组 存放每列的高度值
    214             this.hArr = [];
    215             //遍历所有的box  将第一排中每一列的图片高度值存入到数组中
    216             for( var i = 0 ; i < this.boxs.length ; i++ ){
    217                 if( i < 6 ){ //前六张图片
    218                     this.hArr.push( this.boxs[i].offsetHeight );
    219                 }else{
    220                     //获取要定位的图片所在列的索引 也就是数组中最小值的下标
    221                     var index = this.getMinIndex();
    222                     //定位后面所有的图片 
    223                     this.boxs[i].style.position = "absolute";
    224                     this.boxs[i].style.left = index*this.boxW +"px";
    225                     this.boxs[i].style.top = this.hArr[index] + "px";
    226                     
    227                     //每定位好一张图片后 需要改变index所在数组位置中的数据  
    228                     this.hArr[index] +=  this.boxs[i].offsetHeight;
    229                 }
    230             }
    231             console.log( this.hArr );
    232             return this;
    233         },
    234         getMinIndex : function(){//获取数组最小值的索引
    235             var min = Math.min.apply( null,this.hArr   );//获取数组的最小值
    236             return this.hArr.indexOf( min );
    237         },
    238         fnScroll : function(){//滚动条的操作
    239             window.onscroll = function(){
    240                 //获取最小高度  也就是获取数组的最小值
    241                 var minValue = Math.min.apply( null , this.hArr );
    242                 var wHeight = window.innerHeight;
    243                 var sTop = document.documentElement.scrollTop || document.body.scrollTop;
    244                 var json = {"data" : [{"src":"1.jpg"},{"src":"3.jpg"},{"src":"5.jpg"},{"src":"9.jpg"}]};
    245                 //当  可视区高度+页面滚走距离  > 最小值  开始加载数据
    246                 if( minValue < wHeight + sTop ){
    247                     //开始加载数据
    248                     for( var i = 0 ; i < json.data.length ; i++ ){
    249                         var item = json.data[i];
    250                         var box = create("div");
    251                         box.className = "box";
    252                         var pic = create("div");
    253                         pic.className = "pic";
    254                         var img = create("img");
    255                         img.src = "images/" + item.src;
    256                         pic.appendChild(img);
    257                         box.appendChild(pic);
    258                         this.main.appendChild( box );
    259                     }
    260                     this.init();
    261                 }
    262             }.bind(this)
    263         }
    264     }
    265 </script>

     common.js文件:

    //定义一个函数 功能是根据id查找页面元素
    function $id( id ){
        return document.getElementById( id );
    }
    //创建元素
    function create(ele){
        return document.createElement(ele);
    }
    
    //获取任意区间的整数值
    function rand( min , max ){
        return Math.round( Math.random()*(max-min) + min );
    }
    
    //随机获取六位十六进制颜色值 
    function getColor(){
        var str = "0123456789abcdef";
        var color = "#";
        for( var i = 1 ; i <= 6 ; i++ ){
            color += str.charAt( rand(0,15) );
        }
        return color;
    }
    
    //自定义日期时间格式
    function dateToString(now,sign){
        //默认日期的间隔符为  -  如果用户传递的是/  就使用/  .  如果用户不传递任何参数 默认是-
        sign = sign || "-";
        var y = now.getFullYear();
        var m = toTwo(  now.getMonth()+ 1  ) ;
        var d = toTwo(  now.getDate() );
        var h = toTwo(  now.getHours() );
        var _m = toTwo(  now.getMinutes() );
        var s = toTwo( now.getSeconds() ) ;
        var str = y + sign + m + sign + d + " " + h + ":" + _m + ":" + s;
        return str;
    }
    //判断得到的结果是否小于10 如果小于10,前面拼接0
    function toTwo(val){
        return val < 10 ? "0"+val : val;
    }
    
    //验证码 : 字母和数字组成
    function yzm(){
        //小写字母   大写字母   数字
        //48--122 随机获取一个code值  判断编码值如果在 58--64   91--96 两个区间,就重新抽取
        //如果不在上面的两个区间内,就将code转成字符, 拼接到字符串中
        var str = "";//拼接6位的验证码
        for( var i = 1 ; i <= 6 ; i++ ){
            var code = rand( 48 , 122 );
            if( code >= 58&&code <= 64 || code >= 91 && code <= 96 ){
                //就重新抽一次
                i--;
            }else{
                var ch = String.fromCharCode( code );
                str += ch;
            }
        }
        return str;
    }
    
    //碰撞函数
    function pz(d1,d2){
        R1 = d1.offsetWidth+d1.offsetLeft;
        L1 = d1.offsetLeft;
        T1 = d1.offsetTop;
        B1 = d1.offsetHeight + d1.offsetTop;
        
        R2 = d2.offsetWidth+d2.offsetLeft;
        L2 = d2.offsetLeft;
        T2 = d2.offsetTop;
        B2 = d2.offsetHeight + d2.offsetTop;
        
        //如果碰不上 返回false 
        if( R1 < L2 || B1 < T2 || T1 > B2 || L1 > R2 ){
            return false;
        }else{
            return true;
        }
    }
  • 相关阅读:
    [这不是Windows Phone 7]FitnessTrackerPlus(健身)三.登录及MD5加密
    [Windows Phone 7璀璨]北漂1.0在线歌词播放器三.歌词下载
    [Windows Phone 7璀璨]北漂1.0在线歌词播放器四.独立储存空间歌词的读取(完结)
    [原创]Xcode 4.6 安装 Boost 1.53.0
    [学习笔记]Silverlight4 RIA 开发全程解析[项目全程记录]第零章项目简介
    [笔记]Cocoa训练营cocos2d游戏编程篇动画
    [学习笔记]Silverlight4 RIA 开发全程解析[项目全程记录]第一章FitnessTrackerPlus应用程序概述
    [笔记]Cocoa训练营内存管理篇
    Android_相关路径
    Dynamics AX2009 Report step by step
  • 原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10516247.html
Copyright © 2011-2022 走看看