uView的Waterfall 瀑布流,实现单列,加载更多

这是根据uView的Waterfall 瀑布流来更改的,原组件是左右两列,本次更改主要是列表分页展示,结合官方文档以及此文章即可实现

更改为单个数据,原组件是左右

根目录下找到该组件进行更改
uview-ui/components/u-waterfall/u-waterfall.vue

  • 在中间加入自己定义的all
<template>
	<view class="u-waterfall">
		<view id="u-left-column" class="u-column"><slot name="left" :leftList="leftList"></slot></view>
		<view id="u-right-column" class="u-column"><slot name="right" :rightList="rightList"></slot></view>
		// 自己定义的单列
		<view id="u-all-column" class="u-column u-all"><slot name="all" :allList="allList"></slot></view>
	</view>
</template>
  • splitData下更改即可
async splitData() {
	if (!this.tempList.length) return;
	let leftRect = await this.$uGetRect('#u-left-column');
	let rightRect = await this.$uGetRect('#u-right-column');
	let allRect = await this.$uGetRect('#u-all-column');  //获取id
      
    if(!item) return ;

	this.allList.push(item); //将数组拼接上去
		
 },
  • clear也要加
// 清空数据列表
clear() {
	this.leftList = [];
	this.rightList = [];
	this.allList = []
	// 同时清除父组件列表中的数据
	this.$emit('input', []);
	this.tempList = [];
},
  • 样式
.u-all{
	flex: unset !important;
        width: 100%;

}

页面上的使用

<template>
	<view>
		
		<u-waterfall v-model="activeList" ref="uWaterfall">
		
			<template v-slot:all="{allList}">
				<view class="learnList">
					<view class="item" v-for="(item,index) in allList" :key="index" @click="info(item)">
						<text>{{item.noticeTitle}}</text>
					</view>
				</view>
			</template>
			
		</u-waterfall>
		
		<u-loadmore bg-color="#fff" :status="loadStatus" @loadmore="getActiveList()"></u-loadmore>
		
	</view>
</template>

<script>
	export default {
		data() {
			return {
				active: 0,
				
				activeList: [],
				loadStatus: 'loadmore', 
				// 分页
				page: {
					num: 0,
					limit: 10
				},
				moreStatus: true, // 判断是否触底的时候还需要刷新
				
			};
		},
		onLoad() {
			this.getActiveList()
		},
		onReachBottom() {
			// 如果依然还有数据,就出发
			if (this.moreStatus == true) {
				this.loadStatus = 'loading';
				// 模拟数据加载
				setTimeout(() => {
					this.getActiveList();
					this.loadStatus = 'loadmore';
				}, 1000)
			}
		
		},
		methods: {
			select(index) {
				this.active = index;
				// 有选项卡的情况
				this.page.num = 0;
				this.$refs.uWaterfall.clear();
				this.moreStatus = true
				this.loadStatus = 'loadmore';
				this.getActiveList()
			},
			getActiveList() {
				this.page.num++;
				this.$u.get("/system/notice/list", {
					noticeType: this.tabCate[this.active].id,
					pageNum: this.page.num,
					pageSize: this.page.limit
				}).then(res => {
					if (res.code == 200) {
						
						let resData = res.rows
						
						// 拼接数组
						this.activeList = this.activeList.concat(resData)
						
						// 如果数组为空,或者已经请求完毕,更改更多加载的状态
						if (resData.length == 0 || res.total <= this.activeList.length) {
							this.moreStatus = false
							this.loadStatus = 'nomore';
						}
						
					}
				})
			},
		
		}
	}
</script>

<style lang="scss">
	
</style>

  • 自定义uView的组件,用起很方便的,主要是复用性很高
  • 虽然样式看起来比较简洁,不过总体来说,中等一点的项目,很实用
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
Uniapp 中可以使用 `u-grid` 组件实现瀑布流布局。以下是一个简单的例子: 1. 在页面中引入 `u-grid` 组件: ```html <template> <u-grid :list="images" :column-num="2"> <template v-slot="{ item }"> <img :src="item.url" style="width: 100%;" /> </template> </u-grid> </template> ``` 2. 在页面中定义图片列表数据: ```js <script> export default { data() { return { images: [ { url: 'https://picsum.photos/id/1/300/200' }, { url: 'https://picsum.photos/id/2/300/400' }, { url: 'https://picsum.photos/id/3/300/200' }, { url: 'https://picsum.photos/id/4/300/500' }, { url: 'https://picsum.photos/id/5/300/200' }, { url: 'https://picsum.photos/id/6/300/300' }, { url: 'https://picsum.photos/id/7/300/400' }, { url: 'https://picsum.photos/id/8/300/200' }, { url: 'https://picsum.photos/id/9/300/600' }, { url: 'https://picsum.photos/id/10/300/200' }, { url: 'https://picsum.photos/id/11/300/400' }, { url: 'https://picsum.photos/id/12/300/200' }, { url: 'https://picsum.photos/id/13/300/300' }, { url: 'https://picsum.photos/id/14/300/400' }, { url: 'https://picsum.photos/id/15/300/200' }, { url: 'https://picsum.photos/id/16/300/500' }, { url: 'https://picsum.photos/id/17/300/200' }, { url: 'https://picsum.photos/id/18/300/300' }, { url: 'https://picsum.photos/id/19/300/400' }, { url: 'https://picsum.photos/id/20/300/200' } ] } } } </script> ``` 这样就可以实现一个简单的瀑布流布局。你可以根据需要调整列数和图片数据。注意,`u-grid` 组件需要引入 `uview-ui` 库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

故蓝寻

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

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

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

打赏作者

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

抵扣说明:

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

余额充值