jquery+javaScript完成瀑布流图片页面效果

效果如图:

html:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="css/image.css"/>
        <script type="text/javascript" src="js/jquery-2.1.0.js" ></script>
        <script type="text/javascript" src="js/image.js" ></script>
    </head>

    <body>
        <div class="content">
            <div class="box">
                <div class="img_box"><img src="img/1.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/2.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/3.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/4.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/5.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/6.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/7.jpg" alt="" /></div>
            </div>
            <div class="box">
                <div class="img_box"><img src="img/8.jpg" alt="" /></div>
            </div>
        </div>
    </body>

</html>

css:

* {
    padding: 0;
    margin: 0;
}

.content {
    position: relative;
}

.box {
    float: left;
    padding: 12px 0px 0px 10px;
}

.img_box {
    padding: 10px;
    border: solid 1px black;
    border-radius: 10px;
    box-shadow: 5px 5px 5px 2px darkgray;
}

.img_box:hover {
    margin: 12px;
    box-shadow: 3px 3px 3px 3px darkgray;
}

img {
    width: 400px;
}

.toast {
    position: fixed;
    width: 170px;
    height: 50px;
    text-align: center;
    line-height: 50px;
    box-shadow: 5px 5px 5px 2px darkgray;
    border-radius: 20px;
    background: cornflowerblue;
    top: 600px;
    left: 600px;
    color: white;
    font-weight: bold;
    font-size: 20px;
}

js:

$(document).ready(function() {
    window.onload = init; //当图片加载完后
    window.onscroll = sc; //当滚动进度条时
    $(window).resize(init); //当浏览器页面大小改变时

    function sc() {
        //如果屏幕可见高度+滚动高度>=最后一张图片的高度+最后一张图片的一半,那么自动加载
        if(($(window).scrollTop() + document.documentElement.clientHeight) >=
            ($(".box").last().position().top + $(".box").last().outerHeight() / 2)) {
            //加载更多
            for(var i = 1; i < 26; i++) {
                $(".content").append("<div class=\"box\"><div class=\"img_box\"><img src=\"img/" + i + ".jpg\" /></div></div>");
            }
            $("body").append("<div class=\"toast\">加载中……</div>");
            //设置延时自动关闭
            setTimeout(function() {    $(".toast").hide(200);}, 1000)
            init();
        }
    }

    function init() {
        /**
         * 瀑布流图片代码分析
         * 得到第一行图片个数、最短图片位置
         * 个数:总长度/box长度
         */
        //得到屏幕长度
        var clientW = document.body.clientWidth;
        //得到单个box的长度
        var box = $(".box").outerWidth();
        //得到一行的个数
        var count = parseInt(clientW / box);
        //把图片在页面中居中
        $(".content").css({
            marginLeft: (clientW - box * count) / 2
        })

        var start = 0;
        var end = start + count;
        //循环,把个数的高传入数组
        var arr = [];
        $(".box").slice(start, end).each(function() {
            arr.push($(this).outerHeight());
        })

        //循环,每次都要改变最短图片的位置
        $(".box").each(function(n) {
            //得到最短的图片及它所出现的位置,从0开始
            var minHei = Math.min.apply(null, arr);
            var posit = $.inArray(minHei, arr);
            //即将要出现的图片的左边距就是位置*box长度
            var width = posit * box;
            //如果是第一行后面的图片
            if(n >= count) { //如果是除第 一行后的后面几张
                $(this).css({
                    "position": "absolute",
                    "left": width,
                    "top": minHei,
                });
                arr[posit] += $(this).outerHeight();
            }
        })
    }

})
时间: 2024-10-28 11:50:04

jquery+javaScript完成瀑布流图片页面效果的相关文章

JavaScript实现瀑布流布局以及页面的自动加载

瀑布式布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.所以,我们形象的称此类布局为瀑布流布局. 在此之前,我们用CSS实现此类布局,通常会有以下两种方式: 1.传统多列浮动 各列固定宽度,并且左浮动: 一列中的数据块为一组,列中的每个数据块依次排列即可: 更多数据加载时,需要分别插入不同列上: 虽然说这种布局方式很简单,也不需要明确的知道数据块的高度.但是如果浏览器窗口大小变化时,只能固定X列,很难调整数据块的排列. 2

原生javascript实现鼠标滚轮滚动页面效果

html部分: <div id="gp">  <div id="gunping">         <div class="page1 page">1</div>         <div class="page2 page">2</div>         <div class="page3 page">3</div

jQuery Waterfall插件的使用-瀑布流图片显示

最近做一个项目需要用到jQuery Waterfall插件-瀑布流图片显示 jquery waterfall plugin,like Pinterest . huaban.com . faxianla.com 下载地址: waterfall plugin 如何使用 第一步: 添加html代码 <div id="container"></div> 第二步: 引入需要的js <script src="/path/jquery.min.js"

jQuery实现AJAX定时刷新局部页面实例

本篇文章通过两种方法实例讲解ajax定时刷新局部页面,当然方法有很多种,也可以不使用ajax来刷新页面,可以使用jquery中的append来给指定内容加东西, 但是都不太实用,最实用的方法还是ajax加载数据了. 方法一: 局部刷新我们讲述到最多的是ajax 了,当然也可以不使用ajax来刷新页面了,我们可以使用jquery中的append来给指定内容加东西了,当然最实用的还是ajax加载数据了. 例子,定时局部刷新 定时局部刷新用到jQuery里面的setInterval方法,setInte

jQuery+HTML5图片瀑布流效果

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

JavaScript网站设计实践(一)网站结构以及页面效果设计

原文:JavaScript网站设计实践(一)网站结构以及页面效果设计 这是JavaScript DOM编程艺术里的构建JavaScript网站设计的例子,这本书给我学习JavaScript带来许多启发,在这个乐队宣传网站中,把前面学到的知识点整合在这个项目了.在这里记录下实现这个乐队的宣传网站的具体过程,加深理解.好,从现在开始来实现这个JavaScript网站实战. 一.网页的结构 由三个部分组成:头部.导航.内容 效果图是这样的(勉强看,有点不美观.哈哈): 二.网站的的结构 这是我的项目目

jQuery oLoader实现的加载图片和页面效果

oLoader使用方法 不管是oLoader还是oPageLoader都是基于jQuery,所以调用前请先加载jquery库,作者已经将两个插件集成到一起:jquery.oLoader.min.js,已经打包好请戳源码下载. 调用jQuery oLoader非常简单,一句话如下: [js] view plaincopy $('#element').oLoader(); 使用oLoader加载图片: [js] view plaincopy $(function(){ $('img').oLoade

[JQuery]用InsertAfter实现图片走马灯展示效果2——js代码重构

写在前面 前面写过一篇文章<[JQuery]用InsertAfter实现图片走马灯展示效果>,自从写过那样的也算是使用面向对象的写法吧,代码实在丑陋,自从写过那样的代码,就是自己的一块心病,总感觉不完美,心里一直惦记着那件事,也是在我写过那篇文章之后,没多久,在博客园首页看到了一篇文章较复杂js的书写格式,这里的代码看着比较简介,就想着抽时间将之前的那段js代码进行重构.说做就做,不想一想起之前写过那样的代码,心里就有疙瘩.所以也就有了这篇文章. $.extend 在开始重构之前,需要先学习一

jquery.masonry + jquery.infinitescroll 实现瀑布流布局

转载自:http://www.cnblogs.com/liubiaocai/archive/2013/04/26/3044503.html 最近瀑布流布局非常流行,国内大大小小的瀑布流布局的网站都很多了,比如美丽说.蘑菇街.花瓣等,关于瀑布流布局的资料打开可以百度自己看了,这里介绍两个jquey插件实现瀑布流布局和动态加载数据(分页加载). 1.jquery.masonry,目前布局流行的瀑布流插件有很多,http://www.csswang.com/resource/2261.html,这里有