【jQuery Demo】图片瀑布流实现

核心内容:

1.先设置布局,主要HTML代码如下

<div id="container">
    <div class="box">
        <div class="content">
            <img src="../imgs/Girls/01.jpg">
        </div>
    </div>
     ...
</div>

然后设置宽度固定,高度自适应,.box 相对布局,向左浮动:

.box { position: relative; float: left; }
.content { padding: 2px; border: 1px solid #ccc; border-radius: 2px; }
.content img { width: 234px; height: auto; }
#container { background: #fff none repeat scroll 0 0;  margin: 0 auto; width: auto; }

2.图片位置摆放

因为图片的高度不一致,先根据页面大小获取第一行的图片数量,然后把第二行第一个张图片放到第一行高度最低的图片下面,以此类推:

function imgLocation() {
    var box = $(".box");
    var boxWidth = box.eq(0).width(); //获取第一张图片的宽度
    var num = Math.floor($(window).width()/boxWidth); //确定一排能放多少张图片
    var container = num * boxWidth+"px";
    $("#container").css("max-width",container);
    var boxArr = []; //获取盒子高度
    box.each(function (index, value) {
        var boxHeight = box.eq(index).height();
        if(index < num){
            boxArr[index] = boxHeight;
        }else {
            var minboxHeight = Math.min.apply(null,boxArr); //获取最小高度
            var minboxIndex = $.inArray(minboxHeight,boxArr);
            //通过位置进行摆放
            $(value).css({
                "position":"absolute",
                "top":minboxHeight,
                "left":box.eq(minboxIndex).position().left
            });
            //重新计算高度
            boxArr[minboxIndex] += box.eq(index).height();
        }
    });
}

3.滚动加载

然后通过判断鼠标是否滑动到底部,确定是否自动加载数据。

先判断是否滑到页面底部:

function scrollSide() {
    var box = $(".box");
    var lastBoxHeight = box.last().get(0).offsetTop + Math.floor( box.last().height()/2);
    // 当前页面的高度
    var documentHeight = $(window).height();
    // 鼠标滚动的高度
    var scrollHeight = $(window).scrollTop();
    return (lastBoxHeight < (scrollHeight + documentHeight))?true:false; //是否允许滚动
}

然后监听滚动事件,当满足加载条件时,加载图片:

        //监听鼠标监听事件
        window.onscroll = function () {
            //最后一张图片出现一半时加载
            if(scrollSide()){
                $.each(dataImg.data,function (index, value) {
                    var box = $("<div>").addClass("box").appendTo($("#container"));
                    var content = $("<div>").addClass("content").appendTo(box);
                    $("<img>").attr("src",$(value).attr("src")).appendTo(content);
                });
                imgLocation();
            }
        };

PS:也可以通过Ajax 初始化图片HTML 代码:

//初始化图片
function initializeImgs() {
    $.ajax({
        type:'GET',
        url:url4girls,
        dateType:'xml',
        success:function (data) {
            addImgBox(data);
        }
    });
};

function addImgBox(data) {
    var arr = $(data).find('string');
    $.each(arr,function (index, value) {
        var box = $("<div>").addClass("box").appendTo($("#container"));
        var content = $("<div>").addClass("content").appendTo(box);
        $("<img>").attr("src",$(value).text()).appendTo(content);
    });
    imgLocation();
}

 相关文件

index_by_jQuery.html
index_by_jQuery.js
index_by_jQuery_Ajax.html
index_by_jQuery_Ajax.js
waterfall.css
jquery-3.1.1.min.js
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用jQuery实现瀑布流布局,你可以按照以下步骤进行操作: 1. 首先,确保你已经引入了jQuery库。 2. 创建一个HTML结构,包含一个容器元素和多个子元素,用于展示瀑布流布局的内容。 3. 使用CSS将容器元素设置为相对定位,并设置子元素的样式。 4. 在JavaScript中,使用jQuery选择容器元素,并获取其宽度。 5. 计算每一列的宽度,可以根据容器宽度和列数来决定。 6. 遍历子元素,使用jQuery设置它们的样式,包括绝对定位、宽度和高度。可以根据需要添加动画效果。 7. 监听浏览器窗口的resize事件,当窗口大小改变时,重新计算每一列的宽度,并更新子元素的位置。 下面是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流布局</title> <style> .container { position: relative; } .item { position: absolute; width: 200px; /* 其他样式 */ } </style> </head> <body> <div class="container"> <div class="item">内容1</div> <div class="item">内容2</div> <div class="item">内容3</div> <!-- 更多子元素 --> </div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function() { var container = $('.container'); var colWidth = 200; // 每列宽度 var colCount = Math.floor(container.width() / colWidth); // 列数 function setItemPosition() { var items = container.children('.item'); var heights = new Array(colCount).fill(0); // 记录每一列的高度 items.each(function() { var item = $(this); var minHeight = Math.min.apply(null, heights); // 找到最短列的高度 var minIndex = heights.indexOf(minHeight); // 最短列的索引 item.css({ left: minIndex * colWidth, top: minHeight }); heights[minIndex] += item.outerHeight(true); // 更新最短列的高度 }); } setItemPosition(); // 初始化 $(window).on('resize', function() { colCount = Math.floor(container.width() / colWidth); setItemPosition(); }); }); </script> </body> </html> ``` 你可以根据需要调整样式和设置,以适应你的实际需求。希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竖子敢尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值