瀑布流的简单实现

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #08fa95 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4bd156 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ffffff; min-height: 21.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #00b1ff }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ff4647 }
span.s1 { color: #de38a5 }
span.s2 { color: #ffffff }
span.s3 { }
span.s4 { font: 18.0px "PingFang SC" }
span.s5 { color: #00b1ff }
span.s6 { color: #8b87ff }
span.s7 { color: #08fa95 }
span.s8 { color: #4bd156 }
span.s9 { font: 18.0px "PingFang SC"; color: #4bd156 }

完整实现代码请点击: https://git.oschina.net/null_248_6948/WaterfallLayout.git

extension WaterfallLayout {

// prepare准备所有Cell的布局样式

override func prepare() {

super.prepare()

// 0.获取item的个数

let itemCount = collectionView!.numberOfItems(inSection: 0)

// 1.获取列数

let cols = dataSource?.numberOfColsInWaterfallLayout?(self) ?? 2

// 2.计算Item的宽度

let itemW = (collectionView!.bounds.width - self.sectionInset.left - self.sectionInset.right - self.minimumInteritemSpacing * CGFloat((cols - 1))) / CGFloat(cols)

// 3.计算所有的item的属性

for i in startIndex..<itemCount {

// 1.设置每一个Item位置相关的属性

let indexPath = IndexPath(item: i, section: 0)

// 2.根据位置创建Attributes属性

let attrs = UICollectionViewLayoutAttributes(forCellWith: indexPath)

// 3.随机一个高度

guard let height = dataSource?.waterfallLayout(self, indexPath: indexPath) else {

fatalError("请设置数据源,并且实现对应的数据源方法")

}

// 4.取出最小列的位置

var minH = colHeights.min()!

let index = colHeights.index(of: minH)!

minH = minH + height + minimumLineSpacing

colHeights[index] = minH

// 5.设置item的属性

attrs.frame = CGRect(x: self.sectionInset.left + (self.minimumInteritemSpacing + itemW) * CGFloat(index), y: minH - height - self.minimumLineSpacing, width: itemW, height: height)

attrsArray.append(attrs)

}

// 4.记录最大值

maxH = colHeights.max()!

// 5.给startIndex重新复制

startIndex = itemCount

}

}

时间: 2024-10-07 06:53:00

瀑布流的简单实现的相关文章

jQuery实现瀑布流的简单方法

HTML代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>waterFall</title> <link rel="stylesheet" href="wf.css"> <script src="jquery.js">

瀑布流的简单自定义

#import <UIKit/UIKit.h> @class UICollectionViewFlowWaterLayout; @protocol UICollectionViewFlowWaterDelegate <UICollectionViewDelegate> - (CGFloat)collectionView:(UICollectionView *)c layout:(UICollectionViewFlowWaterLayout *)collectionViewLayo

ios图片瀑布流代码

ios瀑布流,实现简单的瀑布流视图布局,可以显示网络图片,下拉刷新,上拉加载更多. 下载:http://www.huiyi8.com/sc/9087.html ios图片瀑布流代码,布布扣,bubuko.com

简单瀑布流封装

function createLi(){ var oLi=document.createElement('li'); oLi.style.height=parseInt(50+Math.random()*400)+'px'; oLi.style.background='rgb('+rnd(0,255)+','+rnd(0,255)+','+rnd(0,255)+')'; return oLi; }; function rnd(n,m){ return parseInt(Math.random()

javascript 简单的瀑布流

刚开始接触js,就想写写经典的瀑布流,搜了下网上的教程,发现大多是用jquery写的,非常简单,用它也不用考虑兼容性的问题(jquery已经考虑到了),就想自己用原生的js写个简单的瀑布流模型,暂且没有考虑到拖动时自动排版的情形,以后再添加.(发现用原生的js果然步骤比较多啊!很多方法都很底层的!) <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content=&qu

iOS之简单瀑布流的实现

iOS之简单瀑布流的实现 前言 超简单的瀑布流实现,这里说一下笔者的思路,详细代码在这里. 实现思路 collectionView能实现各中吊炸天的布局,其精髓就在于UICollectionViewLayout,因此我们要自定义一个layout来继承系统的UICollectionViewLayout,所有工作都在这个类中进行. 1.定义所需属性 瀑布流的思路就是,从上往下,那一列最短,就把下一个item放在哪一列,因此我们需要定义一个字典来记录每一列的最大y值 每一个item都有一个attrib

UICollectionView 很简单的写个瀑布流

你项目中要用到它吗? 可能会在你的项目中用到这玩意,最近也是要用就简单的写了一个 Demo.没多少代码,就不放Git了,下面会详细点的说说代码的,要还有什么问题的小伙伴可以直接Q我,也可以把Demo发给你,这里有Q可以找一下加我 多多交流,互相学习! 下面是简单的一个效果图,先给看看效果图! 先说说控制器里面的代码,控制器里面就是我们的  UICollectionView  的一些基本的创建了.其实它和 UITableView 相比较的话,但从创建使用看的话,是挺相似的,但其实它真的比 UITa

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

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

简单的瀑布流

最近需要一个简单的瀑布流效果,所以网上找了一个,修改了部分代码 1.轻量代码,压缩2kb. 2.适用宽度自适应布局.瀑布流列由css控制.(先加入空列,获取宽度,删除空列,根据总宽计算列数.) wall.js "use strict"; (function ($) { $.fn.jaliswall = function (options) { this.each(function () { var defaults = { item: '.wall-item', columnClass