uniapp nvue吸顶和瀑布流 及补充教程,补充官方文档不足的地方!- App nvue专用组件

前面是官方的文档,下面有自己的补充,官方的文档毕竟不足!发出来互相学习的同时,也能防止以后再遇到有这些需求的时候,也可以来复习

waterfall

app端nvue专用组件。

<waterfall> 组件是提供瀑布流布局的核心组件。瀑布流,又称瀑布流式布局是比较流行的一种页面布局,视觉表现为参差不齐的多栏布局。随着页面滚动条向下滚动,这种布局还可以不断加载数据块并附加至当前尾部。

在nvue中,使用普通view做瀑布流,无法实现重用和不可见渲染资源释放。使用组件,指定cell后,原生引擎会自动优化性能。

子组件

<list> 组件一样,<waterfall> 组件的子组件只能包括以下四种组件或是 fix 定位的组件,其他形式的组件将不能被正确渲染。

  • <cell> :用于定义列表中的子列表项,类似于 HTML 中的 ul 之于 li。<waterfall> 会对 <cell> 进行高效的内存回收以达到更好的性能。
  • <header> :当 <header> 到达屏幕顶部时,吸附在屏幕顶部。
  • <refresh> :用于给列表添加下拉刷新的功能。
  • <loading><loading> 用法与特性和 <refresh> 类似,用于给列表添加上拉加载更多的功能。

官方的图片,等下下面有补充,官方的文档毕竟不足

属性

  • show-scrollbar : [可选] 可选值为 true/ false,默认值为 true。控制是否出现滚动条。
  • column-count: [可选]描述瀑布流的列数

auto: 意味着列数是被其他属性所决定的(比如 column-width)
<integer>: 最佳列数,column-width 和 column-count 都指定非0值, 则 column-count 代表最大列数。

  • column-width : [可选]描述瀑布流每一列的列宽

auto: 意味着列宽是被其他属性所决定的(比如 column-count)
<length>: 最佳列宽,实际的列宽可能会更宽(需要填充剩余的空间), 或者更窄(如果剩余空间比列宽还要小)。 该值必须大于0

  • column-gap: [可选]列与列的间隙. 如果指定了 normal ,则对应 32
  • left-gap: [可选]左边cell和列表的间隙. 如果未指定 ,则对应 0
  • right-gap: [可选]右边cell和列表的间隙. 如果未指定,则对应 0

在这里插入图片描述

其他支持的属性参见 <list> 组件属性部分

<waterfall> 其属性是和 <list> 一样的,比如 loadmore 事件

事件

支持所有通用事件:

  • click:用于监听点击事件。(例如:一般绑定于子组件之上触发跳转)。
  • longpress:用于监听长按事件(一般绑定于子组件之上例如:长按可删除)。
  • appear:用于监听子组件出现事件(一般绑定于子组件之上例如:监听最后一个元素出现,加载新的数据)
  • disappear:用于监听子组件滑出屏幕事件(一般绑定于子组件之上)

注意

waterfall是区域滚动,不会触发页面滚动,无法触发pages.json配置的下拉刷新、页面触底onReachBottomDistance、titleNView的transparent透明渐变。

以下是补充官方的文档不足

waterfall的子组件header吸顶用法,和list完全不一样,注意看完下面说明的

先上两张图,注意看图片中我用 红色蓝色 方框圈起来的地方

在这里插入图片描述
在这里插入图片描述

这里是我当时遇到问题,问群里,也是毫无卵用,根本没有管理回答!有时候他们太忙了也能理解,毕竟,遇到问题,更多的时候还是我们自己想办法去解决的!

问这个问题,是因为我的项目是nvue,然后首页和首页的所有子分类全是瀑布流,vue我试过,也分类多了后,数据越多,就很卡,而且vue的性能是没有nvue高的。

在这里插入图片描述
然后当我接着准备做瀑布流的时候,才发现 <waterfall> 不能作为 <list> 的子组件使用,然后又去看了一遍官方文档,原来 <waterfall><list> 是同级别的,他们都是父容器。不能互相作为子容器嵌套。

接着,我又把 <list> 换成了 <waterfall> ,可是BUG就出现了,子组件 <header> 不能吸顶,而使用 <list> 作为父容器是可以吸顶的。这就很蛋痛,注意看官方的这一段,它说明的根本不详细!
在这里插入图片描述
官方说 当 <header> 到达屏幕顶部的时候,会自动吸顶,可是实际项目里是不行的,它还少说了 需要给 <header> 设置一个CSS的吸顶属性
代码见下面截图
在这里插入图片描述

官方的图片里也有,只是很容易被忽略!

在这里插入图片描述

在这里插入图片描述

项目里的吸顶效果,已经达到。下面是演示视频

uniapp nvue下的瀑布流和吸顶效果,教程可以看评论里的教程链接

点击查看演示视频

下面是项目里的代码结构,可参考,里面有注释说明

<uni-waterfall :border="false"
		@scrolltolower="loadMoreNVUE"
		@scrollend="scrollendNVUE"
		>	
			<!-- 不吸顶 -->
			<!-- banner-ad [横幅海报广告] -->
			<uni-header>
				<FatFatMeng-banner-ad
				Image_ad="https://r1.ykimg.com/material/0A03/A1/202107/0720/3070562/1626770419878/0D01000060F68C903891682302504A46.jpg"
				></FatFatMeng-banner-ad>
			</uni-header>
			<!-- 不吸顶 -->
			<!-- grid-srcoll-x [grid宫格Icon快捷导航] -->
			<uni-header>
				<FatFatMeng-grid-scroll-x
				:gridlist="gridlist"
				></FatFatMeng-grid-scroll-x>
			</uni-header>
			
			<!-- 吸顶,因为设置了position:sticky; top: 0px;属性 -->
			<!-- tabs-mfw [仿马蜂窝滑动导航栏,并带有吸顶效果] -->
			<uni-header style="position:sticky; top: 0px;">
				<FatFatMeng-Tabs-mfw
				:isFixedTop="Number(55)+Number(statusBarHeight)"
				:isFixed="isFixed"
				:tabslist="tabslist"
				:current="TabCurIndex"
				:windowWidth="screenWidth"
				@change="TabsTap"
				></FatFatMeng-Tabs-mfw>
			</uni-header>
			
			
			
			<!-- 1 -->
			<uni-cell>
				<view style="height: 400px;background-color: #727D8D;">
					<text>{{flag}}</text>
				</view>
				<view style="height: 400px;background-color: #F0AD4E;">
					<text v-for="(item,index) in 100">111111111</text>
				</view>
			</uni-cell>
			<!-- 2 -->
			<uni-cell>
				<view style="height: 200px;background-color: #07C160;">
					<text>{{flag}}</text>
				</view>
				<view style="height: 400px;background-color: #F0AD4E;">
					<text v-for="(item,index) in 100">111111111</text>
				</view>
			</uni-cell>
			<!-- 3 -->
			<uni-cell>
				<view style="height: 400px;background-color: #727D8D;">
					<text>{{flag}}</text>
				</view>
				<view style="height: 400px;background-color: #F0AD4E;">
					<text v-for="(item,index) in 100">111111111</text>
				</view>
			</uni-cell>
			<!-- 4 -->
			<uni-cell>
				<view style="height: 400px;background-color: #727D8D;">
					<text>{{flag}}</text>
				</view>
				<view style="height: 400px;background-color: #F0AD4E;">
					<text v-for="(item,index) in 100">111111111</text>
				</view>
			</uni-cell>
			
		</uni-waterfall>

最后,如果这篇文章 帮助到了你 ,请点个赞支持下,谢谢你的举手之劳

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
对于uniapp动态组件tab的实现,你可以参考以下步骤: 1. 创建一个动态组件,用于展示tab内容。可以在组件中定义好tab的样式和布局。 2. 在页面中引入该动态组件,并将其作为一个子组件进行使用。 3. 使用uniapp提供的事件监听函数,监听页面的滚动事件。 4. 在滚动事件的回调函数中,判断当前页面的滚动位置是否超过了tab组件的位置,如果超过了,则将tab组件设置为状态,否则恢复正常状态。 下面是一个简单的示例代码: 在页面的template中: ```html <!-- 页面内容部分 --> <view style="height: 1000px;"></view> <!-- 引入动态组件 --> <template> <dynamic-tab :is-fixed="isTabFixed"></dynamic-tab> </template> ``` 在页面的script中: ```javascript import dynamicTab from '@/components/dynamicTab.vue'; export default { components: { dynamicTab }, data() { return { isTabFixed: false // 初始化tab组件是否 }; }, mounted() { // 监听页面滚动事件 uni.pageScrollTo({ scrollTop: 0, // 滚动到页面部 duration: 0 // 立即滚动,没有动画效果 }); uni.onPageScroll((res) => { // 判断页面滚动位置是否超过tab组件的位置 if (res.scrollTop >= 200) { // 假设tab组件的位置为200px this.isTabFixed = true; } else { this.isTabFixed = false; } }); } } ``` 在动态组件dynamicTab的template中: ```html <template> <view :class="{'fixed': isFixed}"> <!-- tab内容 --> </view> </template> ``` 在动态组件dynamicTab的script中: ```javascript export default { props: { isFixed: { type: Boolean, default: false // 是否,默认为false } } } ``` 通过以上步骤,你可以实现一个uniapp动态组件tab的效果。当页面滚动到一定位置时,tab组件会固定在页面部,提供更好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值