当前位置:首页 > 代码 > 正文

js原生代码写瀑布流(前端瀑布流)

admin 发布:2022-12-19 20:56 171


本篇文章给大家谈谈js原生代码写瀑布流,以及前端瀑布流对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

web前端原生js实现瀑布流

思路分析

步骤一:构建成行元素 + 寻找新增元素追加位置

瀑布流所有元素的宽度是固定的,我们用浏览器的宽度除以每个瀑布流块的宽度,就是每一行可容纳的瀑布流块的个数.因为,每个瀑布流块的高度不一,我们姑且把组成一行的这组元素称为成行元素,在成行元素放置完毕后,我们如果要再增加一个元素,那么它的位置应该这样找?

“获取成行元素集合中高度最低的那个元素,待放置的元素的top值应该是这个最低元素的高,left值应该是这个最低元素的left值”

这样,新增的这一个元素我们就找到了它存放的位置.这样成行元素中的最低高度值就变为了原来的高度+新增元素的高度.

步骤二:重复步骤一,依赖成行元素追加新元素

步骤一中我们已经实现了一次成行元素追加一个新的元素,这样新元素增加之后我们就构建了新的成行元素,之后的操作就是在新的成行元素中追加新元素,原理同步骤一.

!doctype html

    meta charset="UTF-8"

    title瀑布流效果实现

    script type="text/javascript" src="scripts/jquery-1.8.2.min.js"

    script type="text/javascript" src="scripts/jquery.easydrag.handler.beta2.js"

    script type="text/javascript"

      window.onload=function(){

//获取父级对象

        var oParent = document.getElementById("main");

        //获取父级[第一个参数]下的所有的子元素[按照第二个参数匹配]

        var aPin =getClassObject(oParent,"pin");

        //获取每一个块的宽度

        var iPinW = aPin[0].offsetWidth;

        // //计算每行放多少个pin(瀑布流块)页面的宽度/每一个瀑布流块的宽度

        var num = Math.floor(document.documentElement.clientWidth/iPinW);

        //重置父级的样式,这样保证图片整体居中

        oParent.style.cssText="width:" + num*iPinW +"px;margin:0 auto;";

        var compareArray = [];

        //遍历获取到的所有瀑布流块

        for (var i =0; i

if(i

//成行元素

            compareArray[i] = aPin[i].offsetHeight;

          }else{

//获取成行元素中高度最低的值

            var minHeight = Math.min.apply('',compareArray);

            //alert(compareArray + ",min=" + minHeight);

//获取成行元素中高度最低元素的索引

            var minHkey =getMinHeightKey(compareArray,minHeight);

            //为新增的瀑布流块设置定位

            aPin[i].style.position ="absolute";

            aPin[i].style.top = minHeight +"px";

            //设定新增加的瀑布流块的top和left

            aPin[i].style.left =aPin[minHkey].offsetLeft +"px";

            //将该索引位置的高度改变为新增后的高度[原来瀑布流块的高度+新增的瀑布流块的高度]

            compareArray[minHkey] += aPin[i].offsetHeight;

          }

}

}

/**

*    获取parent下所有样式名为className的对象集合

*/

      function getClassObject(parent,className){

var obj = parent.getElementsByTagName("*");

        var result = [];

        for(var i=0; i

//变量如果匹配className,将匹配的对象放入数组

          if(obj[i].className==className){

result.push(obj[i]);

          }

}

return result;

      }

/**

*    获取arr数组中值为minH的值在数组中的索引

*/

      function getMinHeightKey(arr,minH){

for(key in arr){

if(arr[key] == minH){

return key;

          }

}

}

    style type="text/css"

        /*设置每一个瀑布流块*/

        #main .pin{

width:220px;

            height:auto;

            padding:15px 0px 0px 15px; /*上 右 下 左*/

            float:left;

        }

/*设置每一个瀑布流块中的图像样式*/

        #main .pin .box{

width:200px;

            height:auto;

            padding:10px;

            background:#FFF;

            border:1px solid #ccc;

            box-shadow:0px 0px 6px #ccc; /*中间投影*/

            border-radius:5px; /*圆角*/

        }

#main .pin .box img{

width:200px;

        }

div id="main"

    div class="pin"

        div class="box"

            img src="images/1.webp"

    div class="pin"

        div class="box"

            img src="images/2.webp"

    div class="pin"

        div class="box"

            img src="images/3.webp"

    div class="pin"

        div class="box"

            img src="images/4.webp"

    div class="pin"

        div class="box"

            img src="images/5.webp"

    div class="pin"

        div class="box"

            img src="images/6.webp"

    div class="pin"

        div class="box"

            img src="images/7.webp"

/html

原生JS实现瀑布流布局

瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。

通过定位的方式是我们实现瀑布流的最基本的原理,只要我们动态的设置它的top值、left值,就能让它排列

使用jquery.masonry做瀑布流,图片重叠

我们可以使用 jQuery 的 Masonry 插件来实现这种页面形式,下面介绍一下方法。

1,分别下载 jQuery 与 Masonry ,然后把他们都加载到页面中使用。

加载代码:

script src=""/scriptscript src=""/script

解释:很简单,就是把下载之后的脚本文件嵌入到你想使用瀑布流形式的页面中,注意文件的名称与路径,根据你自己的实际情况修改。

2,页面代码

div id="masonry" class="container-fluid" div class="box"img src=""/div div class="box"img src=""/div div class="box"img src=""/div div class="box"img src=""/div div class="box"img src=""/div .../div

解释:把每个小内容块放在一个拥有相关类的容器里,然后把所有的内容块放在一个大的容器里,这里我们把内容块图片放在一个拥有 .box 类的 div 标签里,然后把他们又使用带有 #masonry ID 的 div 里面,一会儿我们会用 #masonry ID 和 .box 类来触发使用瀑布流。

3,样式代码

.container-fluid { padding: 20px; }.box { margin-bottom: 20px; float: left; width: 220px; } .box img { max-width: 100%}

解释:针对第二步的页面代码,我们需要添加一点样式,.box 类我们添加了浮动属性,还设置了他的宽度。

4,在页面中启用瀑布流形式的脚本代码

$(function() { var $container = $('#masonry'); $container.imagesLoaded(function() { $container.masonry({ itemSelector: '.box', gutter: 20, isAnimated: true, }); });});br

解释:这里我们首先定位想使用瀑布流的大容器是什么,这里就是带有 #masonry ID 的 div 标签,在 var $container = $('#masonry'); 这行代码中定义。然后我们还要说明瀑布流里的每个内容块容器上共同的类是什么,这里就是带有 .box 类的 div 标签,在itemSelector : '.box', 这行代码中定义。

gutter: 20, 这行代码定义了内容块之间的距离是 20 像素,isAnimated: true, 这行代码可以打开动画选项,也就是当改变窗口宽度的时候,每行显示的内容块的数量会有变化,这个变化会使用一种动画效果。

我的一个笨方法:

$(function() { var $objbox = $("#masonry"); var gutter = 25; var centerFunc, $top0; $objbox.imagesLoaded(function() { $objbox.masonry({ itemSelector: "#masonry .box", gutter: gutter, isAnimated: true }); centerFunc = function() { $top0 = $objbox.children("[style*='top: 0']"); $objbox.css("left", ($objbox.width() - ($top0.width() * $top0.length + gutter * ($top0.length - 1))) / 2).parent().css("overflow", "hidden"); }; centerFunc(); }); var tur = true; $(window).resize(function() { if (tur) { setTimeout(function() { tur = true; centerFunc(); }, 1000); tur = false; } });});

JS 瀑布流代码冲突

$ is not a function肯定不是你写的瀑布流代码的问题,是jquery没有正常加载。

检查一下你的jquery文件是如何加载的,从这方面下手找原因。

js实现瀑布流,如何解决报错

他说找不到,很简单,你的JS运行的时候你的页面还没有加载完成,所以你的JS代码找不到你的页面元素,就会抛出这个问题。js加载顺序处理下,把script放到body下面就好了。

关于js原生代码写瀑布流和前端瀑布流的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/23780.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载