JavaScript瀑布流

流式布局之javascript实现照片瀑布流以及Macy.js插件实现瀑布流 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录瀑布流的定义一、实现效果代码首先是用javascript自己手写代码实现照片瀑布流使用插件Mary.js照片流插件实现照片瀑布流总结 瀑布流的定义 瀑布流是什么? 1、琳琅满目:整版以图片为主,大小不一的图片按照一定的规律排列。 2、唯美:图片的风格以唯美的图片为主。 3、操作简单:在浏览网站的时候只需要轻轻滑动一下鼠标滚轮,一切的美妙的图片精彩便可呈现在你面前有一个软件叫瀑布流。 4.瀑布流又称瀑布流式布局,是比较流行的一种网站页 阅读详情

js瀑布流原理:

 1、计算一行能放几张图片,假如为num(当前可视区宽度 / 图片宽度(这里图片宽度是规定好的一个固定值,所有图片宽度一样))      

 2、获取一行中最矮的那张图片,让第索引号大于num的图片放到最矮的图片后面

3、当当前可视区域高度加上滚动条滚动高度大于最后一张图片距离顶部的高度时再加载其他图片,其他图片的加载就是重复上面的步骤

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流</title>
    <style>
        * {
            margin:0;
            padding:0;
        }
        #container {
            position: relative;
        }
        .box {
            padding:5px;
            float: left;
        }
        .img-box {
            padding:5px;
            border:1px solid #ccc;
            box-shadow: 0 0 5px #ccc;
            border-radius:5px;
            overflow: hidden;
        }
        .img-box img {
            width: 150px;
            height:auto;
        }
    </style>
</head>
<body>
<div id="container">
    <div class="box">
        <div class="img-box">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/left.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/free_03.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/004.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/05.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/005.jpg" alt="">
        </div>
    </div>

    <div class="box">
        <div class="img-box">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/left.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/free_03.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/004.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/05.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/005.jpg" alt="">
        </div>
    </div>

    <div class="box">
        <div class="img-box">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/left.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/free_03.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/004.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/05.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/005.jpg" alt="">
        </div>
    </div>

    <div class="box">
        <div class="img-box">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/left.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/free_03.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/004.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/05.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/005.jpg" alt="">
        </div>
    </div>

    <div class="box">
        <div class="img-box">
            <img src="images/1.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/left.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/2.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/free_03.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/004.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/05.jpg" alt="">
        </div>
    </div>
    <div class="box">
        <div class="img-box">
            <img src="images/005.jpg" alt="">
        </div>
    </div>


</div>
<script>
    window.onload = function(){
        var container = document.getElementById("container");
        var Imgs = getChildEle(container,"box");
        imgLocation(Imgs);
        var imgData = {"data":[{"src":"jd1.png"},{"src":"jd2.png"},{"src":"right.png"},{"src":"rss.png"},
            {"src":"search.jpg"},{"src":"mi.png"},{"src":"cloud.gif"}]}   // 模拟后台的数据
        window.onscroll = function(){
            var flag = loadFlag();
            if(flag){
                for(var i = 0; i < imgData.data.length; i++){
                    var Box = document.createElement("div");
                    Box.className = "box";
                    container.appendChild(Box);
                    var imgBox = document.createElement("div");
                    imgBox.className = "img-box";
                    Box.appendChild(imgBox);
                    var img = document.createElement("img");
                    img.src = "images/"+ imgData.data[i].src;
                    imgBox.appendChild(img);
                }
                var NewImgs = getChildEle(container,"box");
                console.log(NewImgs.length)
                imgLocation(NewImgs);
            }
        }
//        获取所有图片盒子
        function imgLocation(imgs){
            var imgWidth = imgs[0].offsetWidth;
            var colsNum = Math.floor(client().width / imgWidth)  //  一行能放的图片张数
            container.style.cssText = "width:" + imgWidth * colsNum+ "px;margin: 0 auto";  // 设置最大容器的宽度
            var len = imgs.length;
            var imgsBoxHeight = [];
            for(var i = 0; i < len; i++){
                if(i < colsNum){
//                    只获取一行中所有图片盒子的高度
                    imgsBoxHeight[i] = imgs[i].offsetHeight;
                }else{
                    var minHeight = Math.min.apply(null,imgsBoxHeight);  // 获取一行盒子中最小高度
                    var minIndex = getminBoxIndex(imgsBoxHeight,minHeight)  // 获取一行盒子中最小高度盒子的索引
                    imgs[i].style.position = "absolute";
                    imgs[i].style.top = minHeight + "px";
                    imgs[i].style.left = imgs[minIndex].offsetLeft + "px";
                    imgsBoxHeight[minIndex] = imgsBoxHeight[minIndex] + imgs[i].offsetHeight;  //  重新给最小盒子赋值高度,此时最小盒子的高为他自身高加上拼接在它后面的盒子高度和
                }
            }
        }
        function getChildEle(parent,content) {   //  获取所有的图片盒子
            var imgsBox = [];
            var allImgs = parent.getElementsByTagName("*");
            for(var i = 0; i < allImgs.length; i++){
                if(allImgs[i].className == content){
                    imgsBox.push(allImgs[i]);
                }
            }
            return imgsBox;
        }
        function client() { // 获取可视区的宽高兼容方法
            if(window.innerWidth != null){
                return {
                    width: window.innerWidth,
                    height: window.innerHeight
                }
            }
            else if(document.compatMode === "CSS1compat"){
                return {
                    width: document.documentElement.clientWidth,
                    height: document.documentElement.clientHeight
                }
            }
            else{
                return {
                    width: document.body.clientWidth,
                    height: document.body.clientHeight
                }
            }
        }
        function getminBoxIndex(imgsBoxHeight,minHight){
            for(var i in imgsBoxHeight){
                if(imgsBoxHeight[i] == minHight) {
                    return i
                }
            }
        }
        function loadFlag(){  //  控制下拉是否加载图片
            var imgs = getChildEle(container,"box");
            var lastImgHeight = imgs[imgs.length-1].offsetTop;
            var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
            var pageHeight = client().height;
            if(lastImgHeight < scrollTop + pageHeight){
               var flag = true;
            }
            return flag;
        }
    }
</script>
</body>
</html>


JavaScript实现图片的瀑布流效果 在一些网站中会用到图片的瀑布流效果,图片的宽度固定而高度不固定,对这样的图片进行排列,具体实现如下: .cont{margin: 0 auto;position: relative;} .box{float: left;padding: 4px;} .imgbox{border: solid 1px #000;padding: 4px;border-radius: 4px;} .imgbox im... 阅读详情

相关推荐

JS解析动态生成移动端瀑布流(两列)

世界这么大,只有四天假. 今天拐回头再看假期前写的两列瀑布流,发现了一个严重的问题. 虽然我用了window.onload方法,但是具体问题还是要具体对待. window.onload适用于结构中已经存在的DOM元素,针对于元素中已有的需要加载异步数据(img中的src,或script中的src、css文件)时起作用,但对于我这次动态生成的img元素而形成的移动端瀑布流,反倒不起作用了. ...

elephant230的博客 1950

JavaScript 瀑布

<!DOCTYPE html> <html> <head> <meta charset="utf8"> <meta http-equiv=“X-UA-Compatible” content="IE-edge, chrome=1"> <meta name="viewport" content="width=device-width, initia

司马懿的西山居 1267

bootstrap+masonry.js写瀑布流

最近在用bootstrap写一个网站,其中有个图文展示的页面要用到瀑布流的效果。 因为项目要求,项目要以bootstrap为基准,不准私自添加内联样式、内部样式,所以,自己写瀑布流就不行了,所以,根据要求,百度查找相关资料,看到masonry.js. 个人认为这是一个非常好用的瀑布流插件。 下面说一下我在引用的过程中遇到的问题,一开始我用bootstrap栅格系统布局,代码如下

JH0610Y的专栏 1万+

javascript实现瀑布流

javascript实现瀑布流 html、css部分 图片部分可自己上网找 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" c

weixin_44456354的博客 133

电磁流量计模拟前端电路设计与优化

模拟前端电路(AFE)是传感器信号处理的核心环节,通过放大、滤波和模数转换实现信号调理。其设计需重点考虑放大器共模抑制比(CMRR)和ADC分辨率等关键参数,在电磁流量计等工业测量应用中,AD8220仪表放大器与AD7172-2 Σ-Δ型ADC的组合能有效简化传统多级架构。现代过采样技术结合数字滤波可替代模拟滤波器,显著提升系统集成度与测量精度,这种设计方法同样适用于压力传感、生物电信号采集等需要高精度信号调理的场景。

weixin_42602241的博客 618

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 288

java瀑布流_原生JS实现瀑布流效果

【前言】近期开始讲到高阶JS,为了提高学习兴趣,再讲点特效。本次简单总结下JS实现瀑布流特效样式特点:(1)呈现出等宽不等高,参差不齐排列(2)拖动滚动条时会不断加载新数据,甚至可以无限往下拖动,一直拖一直加载新数据实现方案:①原生JS;②jQuery库;③CSS3的多栏布局【主体】直接上代码,具体意思里面有注释,注意文件位置JS/*代码初始化*/*{margin: 0;padding: 0;}/...

weixin_42356829的博客 119

用 CL_SALV_TREE 把层级数据做成一棵会呼吸的 ABAP ALV 树:从类继承扫描到事件交互的完整拆解

本文介绍了SAP ABAP中使用CL_SALV_TREE实现树形ALV报表的方法。该技术将层级数据(如类继承关系)以可展开/折叠的树形结构展示,解决了传统ALV Grid无法直观显示层次结构的问题。核心实现采用"数据表+层级表"分离的设计模式:数据表存储节点业务信息,层级表维护父子关系。通过add_node方法动态构建树形结构,支持设置节点文本、图标和事件。文中提供了完整示例代码,演示了如何递归扫描ABAP类继承关系并构建树形ALV,这种技术特别适用于展示类族谱、权限树等层级数据,能显著

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 207

JS瀑布流

JS: (function( $ ,undefined){ /** * 绑定滚动对象 * @param options 自定义配置参数 * */ $.fn.scrollPagination = function(options) { //覆盖默认参数对象 var opts = $.extend($.fn.scrollPagination.defau...

fswy2017的博客 227

YOLO26改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制

本文记录的是利用模块优化的目标检测网络模型。模块具有独特优势。它不同于传统模块,能同时兼顾局部特征高效建模与长距离交互学习。常见模块要么在局部特征处理上有优势但长距离交互能力弱,要么反之,而模块克服了此问题。它融合了Mamba模型和线性注意力机制的优势,通过独特的结构设计,能够在保持计算效率的同时,精准地建模局部特征并学习长距离交互信息。本文将其用于的模型改进和二次创新,能够更加关注图像中的重要特征区域,抑制背景等无关信息的干扰,从而突出目标物体的关键特征。Demystify Mamba in Vision

Limiiiing的博客 216

SAP FICO 内部往来对账功能开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 内部往来对账功能开发说明书(包括开发源代码、测试样例、FS)

我好像病了的博客 1226

javascript特效之瀑布流

最近给大家分享一下在项目中用原生js实现的瀑布流特效。 要实现瀑布流,先让我们来看看他的实现步骤。 1.给div设置浮动。 float:left。 2. 计算可视宽度下,每一行能放多少个 3. 把第一排的的元素的高度,存入一个数组中, 找到里面最小的高度,给后面的行设置定位,改变top,left。高度累加。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <me

m0_37685031的博客 232

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

原生JS实现瀑布流

原生JS实现瀑布流  浏览网页的时候经常会遇到瀑布流布局的网站。也许有些读者不了解瀑布流。瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。比如下面图片的效果,就是一个典型的瀑布流。网上有很多JQ的瀑布流插件,而且都写好了兼容,都可以尝试去使用,这里只是跟大家分享一下原生js实现瀑布流的效果,一...

Djj_Alice的博客 306

高通IPA硬件加速介绍

‌ 高通IPA (Internet Protocol Accelerator)模块是一种硬件加速模块,由高通公司(Qualcomm)提供,主要用于优化移动设备上的网络数据传输,特别是通过 LTE 、 5G 等移动网络的数据传输‌‌。IPA模块通过硬件加速,显著提高了数据传输的速度和效率,同时降低了设备的功耗,并提供了更稳定的网络连接,减少了数据传输中的丢包和延迟‌。

四儿家的小祖宗的博客 1627

AutoSAR系列讲解 - 前言

博主xyfx是一名汽车行业的嵌入式软件工程师,本职工作是同步电机的驱动控制(主要做FOC的,这个大家要是有兴趣,以后可以单独开一个专栏来讲解一下),由于做控制器的时候需要用到AutoSAR,所以特意的去学习了相关知识,同时博主自己也在同步提高中,有写的不合理的地方也请大家指正。我准备对AutoSAR开设两个大的方面来讲解,一是AutoSAR的入门篇,二是AutoSAR的实践篇,分别讲述AutoSAR的理论基础和工具的使用。

雪云飞星的博客 4万+

JS 无线滚动的瀑布流

1、html代码部分 <div class="box"></div> 2、css样式部分 * { margin: 0; padding: 0 } .box { margin: 0 auto; position: relat...

boonyaxnn的博客 289

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JS动态瀑布流

效果图 第一排图片加载后,接下来的每一张图片选择瀑布流6列中高度最小的一列添加,添加后修改该列的高度,随后的图片依此类推完成瀑布流 当浏览器滚动条下滑到当前最后一张图片时,自动继续加载图片 html代码 先定义一个水平居中的大盒子id=container,包含所有图片 每一张图片 <div class="box"> <div class="box_img"> <img src="img/1.jpg">

Templar136的博客 534

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JavaScript——原生js实现瀑布流

瀑布流介绍及实现原理:   瀑布流是一种页面布局,页面上也有多等宽的块(块就页面内容),每一块都是绝对定位(absolute),每个块排列的方式如下:寻找现在高度最小的列,把该块定位到该列下方。需要知道,浏览器的可视区域不尽相同,因此布局之前我们总要计算得到当前页面可以容下得列数,计算方法为:页面总宽度/图片宽度,将结果向下取整即可。   经过以上处理,我们可以得到每列高度都差不多得...

weixin_30888027的博客 173

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【js】【图片瀑布流】js瀑布流显示图片20180315

js实现把图片用瀑布流显示,只需要“jquery-1.11.2.min.js”。 js: //20180315 //瀑布流显示图片 var WaterfallImg = { option: { maxWidth: 850,//每一行固定的总的宽度 ifBeyond: 1,//加载到最后一张图超出范围时,参数值 0:超出一定范围(be...

weixin_30538029的博客 183

纯CSS瀑布流与JS瀑布流

瀑布流 又称瀑布流式布局,是比较流行的一种网站页面布局方式。即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置。 为什么使用瀑布流 瀑布流布局在我们现在的前端页面中经常会用的到,它可以有效的降低页面的复杂度,节省很多的空间,对于整个页面不需要太多的操作,只需要下拉就可以浏览用户需要看到的数据;并且,在当前这个APP至上的时...

在线学习web前端开发教程 210

js原生代码写瀑布流

html 部分 瀑布流 //sheng

Vimo的Blog 896

分别使用JS和JQuery实现瀑布流以及追加效果

分别使用JS和JQuery实现瀑布流以及追加效果效果图htmlcss/style.cssjs实现瀑布流jquery实现瀑布流js和jquery对比代码jquery实现瀑布追加的效果 效果图 html <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>瀑布流</title> <link rel

leeeeeena's blog 379

JS—实现瀑布流效果

JS 实现响应式瀑布流效果

xiaobai_qxjn的博客 470

JavaScript瀑布流的实现以及底部刷新

JavaScript瀑布流的实现以及底部刷新  分类: 前端学习笔记(4)  版权声明:本文为博主原创文章,未经博主允许不得转载。 通过使用JavaScript来实现瀑布流,我们可以对JS了解的更加深刻。 我们知道在不使用浮动属性的时候,图片会按照在html代码里的顺序依次排列,而我们想要实现瀑布流,就应该把页面上每行都固定住,然后

gxf_ming的博客 526
上一篇: 数组常用方法和属性
下一篇: 商品放大镜效果
wp1119
博客等级 码龄9年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值