Skip to content

List (长列表)

list-view组件的增强,增加自定义下拉刷新和上拉加载,增加WEB端和IOS端支持【scrollend】事件

支持平台

安卓ios鸿蒙web微信小程序

示例代码

html
<template>
	<t-page :scroll-disabled="true" main-class="p-30">
		<t-card main-class='mb-30' title="List 滚动视图"
			sub-title="对官方list-view组件的增强,增加自定义下拉刷新和上拉加载,增加WEB端和IOS端支持【scrollend】事件"></t-card>
		<t-list type="p" main-class="f" ref="ins" @scrolltolower="scrolltolower" @refresherrefresh="refresherrefresh"
			@scrollend="scrollend">
			<t-list-item v-for='(item,index) in componentList' :key="index">
				<t-row main-class='p-30 mb-30 tdb tdr fjcb'>
					<t-text>{{item['tag']}}</t-text>
					<t-text>{{item['name']}}</t-text>
					<t-icon :name="item['icon']" :stop="true"></t-icon>
					<t-icon name="thumb-up" :stop="true"></t-icon>
					<t-icon name="edit-pen" :stop="true"></t-icon>
					<t-icon name="star" :stop="true"></t-icon>
					<t-icon name="trash" :stop="true"></t-icon>
				</t-row>
			</t-list-item>
			<!-- <template #loadmore>
				<text>加载更多</text>
			</template>
			<template #refresher>
				<text>自定义下拉刷新</text>
			</template> -->
		</t-list>
	</t-page>
</template>

<script setup>
	import { TuiApi } from '@/api'
	import { TuiSleep } from '@/uni_modules/tui-plugins'
	const ins = ref<TListComponentPublicInstance | null>(null)
	const mask = ref(true)
	const cur = ref(1)
	const total = ref(0)
	const pageSize = ref(20)
	const list = ref<UTSJSONObject[]>([])
	const componentList = ref<UTSJSONObject[]>([])
	const sleep = new TuiSleep(1000)
	let loading : boolean = false
	function getComponentList() : Promise<UTSJSONObject[]> {
		return new Promise((
			resolve : (rst : UTSJSONObject[]) => void
		) => {
			if (loading) return
			loading = true
			TuiApi('getComponent', {
				"current": cur.value,
				"pageSize": pageSize.value,
				"keyword": '',
				"type": 'all',
				devstatus: 'completed'
			},true).then((res : UTSJSONObject) => {
				const lastPage = (res as UTSJSONObject).getBoolean('data.lastPage')!
				sleep.call(() => {
					cur.value++
					loading = false
					if (lastPage) {
						ins.value!.setLoadmore(3)
					} else {
						//设置状态为0会销毁组件,避免loading会在后台运行
						ins.value!.setLoadmore(0)
					}
					nextTick(() => {
						resolve((res as UTSJSONObject).getArray('data.list') as UTSJSONObject[])
					})
				})
			})
		})
	}
	function scrollend(e : UniScrollEvent) {
		console.log(e)
	}
	function refresherrefresh() {
		loading = false
		cur.value = 1
		getComponentList().then((data : UTSJSONObject[]) => {
			componentList.value = data
			ins.value!.closerefresher()
		})
	}
	function scrolltolower() {
		getComponentList().then((data : UTSJSONObject[]) => {
			componentList.value.push(...data)
		})
	}
	onUnload(() => {
		sleep.clear()
	})
	onLoad(() => {
		getComponentList().then((data : UTSJSONObject[]) => {
			ins.value!.hideMask()
			componentList.value = data
		})
	})
</script>

属性

名称类型默认值说明可选值
sizeStringmini组件尺寸large(大尺寸), medium(中尺寸), small(小尺寸), mini(迷你)
typeString""组件类型info(信息), primary(正常), error(错误), warning(警告), success(成功)
disabledBooleanfalse组件是否禁用false, true
stopBooleanfalse是否阻止事件冒泡(Tui统一写法处理事件冒泡)false, true
hoverBooleantrue是否有点击效果false, true
pathString""点击组件后跳转的页面路径,如果为空则响应点击事件,如果不为空则跳转页面不会响应单击事件。-
mainClassString""组件根节点的样式-
nativeClassString""组件根节点原生样式-
effectString"normal"组件显示主题normal(正常), dark(深色), light(浅色), plain(镂空)
loadmoreBooleantrue是否显示加载更多
refresherBoxClassString``下拉刷新盒子的样式
bouncesBooleantrue控制是否回弹效果 优先级高于rebound
scrollTopNumber1设置竖向滚动条位置
scrollWithAnimationBooleantrue是否在设置滚动条位置时使用滚动动画,设置false没有滚动动画
showScrollbarBooleanfalse控制是否出现滚动条
backtopBooleanfalse是否显示返回顶部
loadmoreBoxClassString``加载更多盒子的样式
directionStringvertical滚动方向紧支持纵向
associativeContainerStringnested-scroll-view关联的滚动容器nested-scroll-view: 嵌套滚动
lowerThresholdNumber50距底部/右边多远时(单位px),触发 scrolltolower 事件
scrollIntoViewString``值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素起始位置
refresherThresholdNumber100设置下拉刷新阈值, 仅 refresher-default-style = 'none' 自定义样式下生效
customNestedScrollBooleanfalse子元素是否开启嵌套滚动 将滚动事件与父元素协商处理
refresherEnabledBooleantrue是否禁用下拉刷新
refresherBackgroundStringtransparent设置下拉刷新区域背景颜色,默认透明
maskClassString``
upperThresholdNumber50距顶部/左边多远时(单位px),触发 scrolltoupper 事件
scrollLeftNumber1设置横向滚动条位置

事件

名称返回参数说明
refresherpulling(event: UniRefresherEvent) => void下拉刷新控件被下拉
scrolltolower(event: UniScrollToLowerEvent) => void滚动到底部/右边,会触发 scrolltolower 事件
refresherabort(event: UniRefresherEvent) => void下拉刷新被中止
refresherrefresh(event: UniRefresherEvent) => void下拉刷新被触发
scrollend(event: UniScrollEvent) => void滚动结束时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}
refresherrestore(event: UniRefresherEvent) => void下拉刷新被复位
scrolltoupper(event: UniScrollToUpperEvent) => void滚动到顶部/左边,会触发 scrolltoupper 事件
scroll(event: UniScrollEvent) => void滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}

插槽

名称返回值说明
default-
name-