js实现图片的瀑布流

先看效果:

初始状态:

瀑布流效果:

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>瀑布流</title>
    <style type="text/css">
        *
        {
            margin: 0px;
            padding: 0px;
        }
        #container
        {
            position: relative;
        }
        .box
        {
            padding: 5px;
            float: left;
        }
        .box_img
        {
            padding: 5px;
            border: 1px solid #cccccc;
            box-shadow: 0 0 5px #ccc;
            border-radius: 5px;
        }
        .box_img img
        {
            width: 200px;
            height: auto;
        }
    </style>
    <script type="text/javascript">
        //        先固定整个屏幕的宽度  即每行的个数
        window.onload = function () {
            imgLocation("container", "box");
        };
        function imgLocation(parent, content) {
            //将parent下多有的content全部取出
            var cparent = document.getElementById(parent);
            var ccontent = getChildElement(parent, content);
            //每个图片的宽度
            var imgWidth = ccontent[0].offsetWidth;
            //每行图片的个数
            var num = Math.floor(document.documentElement.clientWidth / imgWidth);
            //改变container的样式
            cparent.style.cssText = "width:" + imgWidth * num + "px;margin:0px auto";

            var BoxHeightArr = [];
            for (var i = 0; i < ccontent.length; i++) {
                if (i < num)
                    BoxHeightArr[i] = ccontent[i].offsetHeight;
                else {
                    var minheight = Math.min.apply(null, BoxHeightArr);
                    //                    console.warn(minheight);
                    var minindex = getminheightLocation(BoxHeightArr, minheight);
                    console.warn(minindex);
                    ccontent[i].style.position = "absolute";
                    ccontent[i].style.top = minheight + "px";
                    //这里的
                    ccontent[i].style.left = ccontent[minindex].offsetLeft + "px";
                    BoxHeightArr[minindex] = BoxHeightArr[minindex] + ccontent[i].offsetHeight;
                }
            }
        }

        //获得最小高度的位置
        function getminheightLocation(BoxHeightArr, minHeight) {

            for (var i = 0; i < BoxHeightArr.length; i++)
            //                for (var i in BoxHeightArr)
            {
                if (BoxHeightArr[i] == minHeight) {
                    return i;
                }
            }
        }

        function getChildElement(parent, content) {
            var contentArr = [];
            var allcontent = document.getElementsByTagName("*");
            for (var i = 0; i < allcontent.length; i++) {
                if (allcontent[i].className == content)
                    contentArr.push(allcontent[i]);
            }
            return contentArr;
        }
    </script>
</head>
<body>
    <div id="container">
        <div class="box">
            <div class="box_img">
                <img src="img/1 (1).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (2).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (3).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (4).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (5).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (6).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (7).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (8).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (9).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (10).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (11).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (12).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (13).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (14).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (15).jpg" />
            </div>
        </div>
        <div class="box">
            <div class="box_img">
                <img src="img/1 (16).jpg" />
            </div>
        </div>
    </div>
</body>
</html>
时间: 2024-10-29 03:11:01

js实现图片的瀑布流的相关文章

玩转Masonry JS库来实现瀑布流Web效果

工作项目中需要制作个Mobile上的Web App的展示,方便快捷访问和评价反馈.在展示页面能看到应用展示图,点击进入Web应用.我不是前端开发者,对HTML, CSS, JS这三剑客仅仅是略知一二.于是先规划了个简单的设计,感觉瀑布流的图片展示方式比较美观,同时布局的高度也一定灵活性.就按照Pinterest Android/IOS和花瓣Mobile Web App的目标开始实现. 第一天的成果是完成了基本的展示和链接.在iPhone模拟器上效果如下 : HTML页面代码snippet: 1

利用JS实现简单的瀑布流效果

哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了, 虽然中间非常的坎坷, 并不是一帆风顺但是最终我还是实现了个简单的效果, 下面就为大家简单的介绍下, 不知道的友友们, 有兴趣的话, 可以来参考下, 欢迎指出缺点和不足! 一.瀑布流之准备工作   首先声明下, 为了方便演示和联系, 我使用的是本地图片, 如果大家有需要的话可以尝试着写下网络的,

js实现响应式瀑布流

导读:瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格,像花瓣网.蘑菇街.美丽说等. 最近在好多地方看到瀑布流的字眼,感觉真的很不错,于是就想自己能不能写一个呢,而且是响应式的.经过将近两天的研究,终于写出来了,先传几张图给大家看看最终的效果:      随着浏览器页面的大小调整.布局从四列逐渐变成三

Android 高仿微信图片选择器(瀑布流)

前言 在很多很多的项目中,都有选择本地图片的功能,现在就带大家做一个仿微信的图片选择器 1.和微信相比,由于博主是平板,微信在博主的平板中的图片是很模糊的,而我们的这个比微信的清晰,但是代价基本就是内存的多消耗,但是现在的收集基本上这点内存还是有的,图片也是经过压缩的 2.和鸿洋封装的相比,有些人可能会说和大神的有可比性么?我可以很直白的说这个图片选择器就是参考鸿洋大神以前封装的图片选择器,并且进行代码的分层.逻辑的重新梳理.优化显示效果.去除很多难懂的代码,用浅显易懂的代码实现之!,并且图片的

StaggeredGridView+universal-image-loader加载网路图片实现瀑布流

StaggeredGridView 开源lib  https://github.com/maurycyw/StaggeredGridView 文章demo下载地址  http://download.csdn.net/detail/u012303938/8883957 用imageloder去加载网络图片   用StaggeredGridView去显示实现瀑布流. MainActivity package com.origamilabs.library; import java.util.Arra

简单实现加载图片的瀑布流效果

代码很简单,没有注释 <style type="text/css"> *{ margin:0px; padding:0px; } #container{ position:relative; } .box{ padding:5px; float:left; } .box_img{ padding:5px; border:1px solid #CCC; box-shadow:0 0 5px #CCC; border-radius:5px; } .box_img img{ wi

jQuery+HTML5图片瀑布流效果

JavaScript与HTML5实现美女瀑布流布局,本方法是把图片的路径写在了JS的数组里,不过重点好像不是在这里,而是在图片如何自动排列的问题,你可以运行本实例后,点击“加载瀑布流布局”按钮,即可看到图片的瀑布流排列效果,现在很流行这个,希望您从本代码中能找到一些灵感. <!DOCTYPE HTML> <html> <head> <title>jQuery+HTML5图片瀑布流效果丨河北电动叉车|石家庄苗木</title> <style

用瀑布流的方式在网页上插入图片

当我们的网页需要插入很多图片的时候,为了美观,我们可以选择用瀑布流的方法插入图片 首先我们在body里面放入我们需要展示的图片 <div id="box"> <div class="dinwei"> <div class="pic"> <img src="image/1.jpg"> </div> </div> <div class="din

利用LruCache和DiskLruCache加载网络图片实现图片瀑布流效果(升级版)

MainActivity如下: package cc.patience7; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 更新说明: * 在原本的的基础上添加了本地缓存DiskLruCache * * 所以在该示例中对于图片的缓存采用了:LruCache + DiskLruCache 的技术 * * 参考