zoukankan      html  css  js  c++  java
  • 瀑布流布局(1)

    前言

    完成一个动漫人物的瀑布流布局,分别通过原生JavaScript、Css3和Jquery方式实现。
    首先是使用JavaScript。

    一、创建基本框架

    1 HTML结构

    <main>                    //便于以后进行 相对定位
        <div class="wrap">    //为了方便设置图片和图片之间样式+绝对定位
          <div class="pic">   //包裹图片,设置单个图片的样式
            <img src="img/1.jpg" alt="图片1">
          </div>
        </div> 
    </main>
    

    2 CSS基本样式

    *{                       /* 简单全局重置 */
      margin: 0;
      padding: 0;
    }
    
    main{
      position: relative;    /*相对布局*/
    }
    
    .wrap{
      padding: 15px 0 0 15px;  /*设置内边距,便于以后JS计算高度*/
    }
    
    .pic{
      border: 1px solid #ccc;
      padding: 10px;
      border-radius: 5px;          /*设置边框圆角 */
      box-shadow: 0 0 6px #ccc;  /*水平、垂直偏移;模糊度;颜色*/
    }
    
    .pic img{
       162px;    /*瀑布流特点,图片等宽不等高 */
      height: auto;
    }
    

    二、设置图片的定位 和 排序

    1 设置列数和main的宽度

    window.onload=function(){
      waterfall("main",".wrap");
    }
    
    function waterfall(parent,box){
      var oneparent = document.querySelector(parent);   //获取main元素
      
      //S1 获取main元素里面的所有 类warp元素
      var boxs = oneparent.querySelectorAll(box);    
      
      //S2 计算整个页面显示的列数;(页面宽/每列的盒子wrap宽)
      var oneboxwidth = boxs[0].offsetWidth;    //每列的盒子wrap宽
      var cols = Math.floor(document.documentElement.clientWidth / oneboxwidth) ; //获取 整数列数
      
      //S3 设置main的 固定宽度
      oneparent.style.cssText = '' + (oneboxwidth * cols)+'px; margin:0 auto';
    }
    

    2 获取第一列图片的高度

    window.onload=function(){
      waterfall("main",".wrap");
    }
    
    function waterfall(parent,box){
      var oneparent = document.querySelector(parent);   //获取main元素
      
      // 获取main元素里面的所有 类warp元素
      var boxs = oneparent.querySelectorAll(box);    
      ......
      ......
      //获取第一列图片的高度
      //S1 存放数据的 数组
      var boxsHeightArry = [];
      //S2 获取图片高度并存放
      for (var i=0; i<boxs.length; i++){
        if(i < cols){
          boxsHeightArry.push(boxs[i].offsetHeight);
        }
      }
      console.log(boxsHeightArry);
    }
    

    3 绝对定位,把以后的图片,都放到第一行最矮的下方

     //S1 存放数据的 数组
      var boxsHeightArry = [];
      //S2 获取图片高度并存放
      for (var i=0; i<boxs.length; i++){
        if(i < cols){
          boxsHeightArry.push(boxs[i].offsetHeight);
        }else{
          //S1 获取第一行的最小值&索引值
          minBoxHeight = Math.min.apply(null,boxsHeightArry);
          minBoxHeightIndex = boxsHeightArry.indexOf(minBoxHeight);
          //S2 调试   console.log( minBoxHeightIndex);
          //S3 设置第二行及以后行 图片的绝对定位位置
           boxs[i].style.position = "absolute";
          boxs[i].style.top = minBoxHeight + 'px';
          boxs[i].style.left = oneboxwidth * minBoxHeightIndex + 'px';
        }
      }
    

    4 每次循环时都增加后放的图片的高度,从而改变数组里最矮的值

    else{ 
          //S1 获取第一行的最小值&索引值
          minBoxHeight = Math.min.apply(null,boxsHeightArry);
          minBoxHeightIndex = boxsHeightArry.indexOf(minBoxHeight);
          //S2 调试 console.log( minBoxHeightIndex);
    
          //S3 设置第二行及以后行图片的 绝对定位位置
          boxs[i].style.position = "absolute";
          boxs[i].style.top = minBoxHeight + 'px';
     // boxs[i].style.left = oneboxwidth * minBoxHeightIndex + 'px';
        boxs[i].style.left = boxs[minBoxHeightIndex].offsetLeft + 'px';
    
     //从第二行开始,每次循环时都增加后放的图片的高度,从而改变数组里最矮的值
          boxsHeightArry[minBoxHeightIndex] += boxs[i].offsetHeight;
    }
    

    四 Reference

      1 js改变css样式的三种方法;

  • 相关阅读:
    Java实现 洛谷 P1060 开心的金明
    (Java实现) 洛谷 P1605 迷宫
    (Java实现) 洛谷 P1605 迷宫
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
    Java实现 洛谷 P1064 金明的预算方案
    (Java实现) 洛谷 P1031 均分纸牌
    QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
    武则天红人对唐睿宗的桃色报复(如此缺少城府,注定了要在宫廷中过早地出局)
  • 原文地址:https://www.cnblogs.com/ygming/p/8446850.html
Copyright © 2011-2022 走看看