原生js实现瀑布流

作者: 蘩蕐皆成空 | 来源:发表于2017-04-24 23:01 被阅读120次

        浏览网页的时候经常会遇到瀑布流布局的网站。也许有些读者不了解瀑布流。瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。比如下面图片的效果,就是一个典型的瀑布流。

网上有很多JQ的瀑布流插件,而且都写好了兼容,都可以尝试去使用,这里只是跟大家分享一下原生js实现瀑布流的效果,一起学习。

```<!doctype html>

<html lang = "en">

<head>

             <meta charset  = "UTF-8">

             <title>原生js瀑布流</title>

<style type="text/css">

            div{
                     background:#ccc;

                     width:200px;

                     position: absolute;

                    transition:0.5s;

                }

</style>

</head>

<body>

<script type="text/javascript">

function createDiv(){

for(var i =0; i<20; i++){

var div =document.createElemnet("div");

var rnd = Math.floor(Math.random()*300+50)  // div的高度在50到350之间

div.style.height = rnd+"px";

div.innerHTML = i;

document.body.appendChild(div);

}

change()

}

function change(){

var aDiv = document.getElementsByTagName('div');

var windowCw = document.documentElement.clientWidth;  //窗口可视的宽度

var n  = Math.floor(windowCw/210);   /一行可以容纳几个div,并向下取整

if (i<=0){

return}

var t =0;

var center = (windowCw-n*210)/2;         //居中

var arrH = []; //定义一个空数组,存放div的高度

for(var i= 0;i<arrH.length;i++){
var j = i%n;

if (arrH.length==n) {                    //一行排满n个后到下一行

var min = findMin(arrH);              //从最“矮”的排起,可以从下图的序号中看得出来,下一行中序号是从矮到高排列的

aDiv[i].style.left =center + min*210 + "px";

aDiv[i].style.top = arrH[min]+10 + "px";

arrH[min] += aDiv[i].offsetHeight + 10;

// alert(min);

}else{

arrH[j] = aDiv[i].offsetHeight;

aDiv[i].style.left =center + 200*j+10*j + "px";

aDiv[i].style.top = 0;

}

};

}

window.onresize = function(){      //窗口改变也调用函数

change();

}

window.onscroll= function  () {

// 页面总高度

var bodyHeight = document.documentElement.offsetHeight;

// 可视区高度

var windowHeight = document.documentElement.clientHeight;

//滚动条的高度

var srcollTop = document.documentElement.scrollTop || document.body.scrollTop;

var srcollH = document.body.scrollHeight;

// alert(srcollH);

if (srcollTop+windowHeight  >= srcollH-20) {

createDiv();

};

}

function findMin(arr) {

var m = 0;

for (var i = 0; i < arr.length; i++) {

m = Math.min(arr[m], arr[i]) == arr[m] ? m : i;

}

return m;

}

</script>

</body>

</html>

```

相关文章

  • 原生js实现瀑布流

    浏览网页的时候经常会遇到瀑布流布局的网站。也许有些读者不了解瀑布流。瀑布流,又称瀑布流式布局。是比较流行的一种网...

  • Js实现瀑布流

    1.使用原生js实现瀑布流效果,demo地址(https://xukeler.github.io/waterfal...

  • 原生js实现瀑布流效果

    实现目标:实现瀑布流布局、当滚动条滚动到一定距离时加载图片瀑布流布局:结合窗口改变 定位第一行的盒子 第二行第一...

  • 原生Js实现瀑布流效果

    盗用的效果图 效果分析 瀑布流中图片的宽度都是固定的,但是高度需要设置为auto以使图片不变形,高度不固定。首先想...

  • js/jQuery实现瀑布流

    html中主要代码: 实现瀑布流的js代码: css实现瀑布流只需要三行代码: 实现下拉刷新的js代码: js/c...

  • 撩课-Web大前端每天5道面试题-Day4

    1. 如何实现瀑布流? 高清视频讲解(第53节)-->点我 2. 原生JS都有哪些方式可以实现两个页面间的通信? ...

  • 撩课-Web大前端每天5道面试题-Day2

    1. 如何实现瀑布流? 高清视频讲解(第53节)-->点我 2. 原生JS都有哪些方式可以实现两个页面间的通信? ...

  • 原生js实现瀑布流效果(转载)

    写的特别好 文章链接

  • JS实现瀑布流

    用js实现瀑布流代码,实现下拉过程中图片的自动加载:效果如下: ![]98]ZI}Y[~1]WE9OFBV}}VA...

  • JS 实现瀑布流

    在极客学院下载的 JS 基础视屏中提到了瀑布流效果,花了一下午的时间去学习,到现在终于也算有所理解了,自己也动手实...

网友评论

    本文标题:原生js实现瀑布流

    本文链接:https://www.haomeiwen.com/subject/ymhjzttx.html