Skip to content

ScrollView 滚动视图

基础用法

  • 基于 scroll-view 封装的通用滚动视图容器,内置下拉刷新(sn-refresher)、加载更多(sn-loadmore)与回到顶部按钮(sn-backtop)。
  • 通过 direction 控制滚动方向(旧 scroll-x / scroll-y 写法已废弃),支持嵌套滚动。
  • 内容直接写在默认插槽中,由使用者自行布局。
vue
<template>
	<sn-scroll-view refresher-enabled v-model:refresher-triggered="refresherTriggered"
		loadmore v-model:loadmore-status="loadmoreStatus" backtop
		@refresherrefresh="onRefresh" @loadmore="onLoadmore">
		<view v-for="(item, index) in items" :key="index" class="scroll-item">
			<sn-text :text="item"></sn-text>
		</view>
	</sn-scroll-view>
</template>

更多演示请下载 demo 查看

横向滚动

设置 direction="horizontal" 即可横向滚动,容器内部主轴方向自动跟随切换。

vue
<template>
	<sn-scroll-view direction="horizontal" :refresher-enabled="false" :loadmore="false">
		<view class="h-row">
			<view v-for="(item, index) in hItems" :key="index" class="h-item">
				<sn-text :text="item"></sn-text>
			</view>
		</view>
	</sn-scroll-view>
</template>

嵌套滚动

设置 nestedtrue 后组件与父级嵌套滚动容器关联(等同于 associative-container="nested-scroll-view"),并透传 startnestedscroll / nestedprescroll / stopnestedscroll 三个嵌套滚动协商事件。

属性

参数说明类型默认值可选值
direction滚动方向Stringverticalnone | horizontal | vertical
v-model:refresher-triggered绑定当前下拉刷新状态Booleanfalsetrue | false
v-model:loadmore-status绑定加载更多组件状态,触底或点击加载更多时组件内部自动改写为 loading,由父组件在 loadmore 事件中更新加载结果Stringloadmoreloadmore | loading | nomore
refresherEnabled是否开启下拉刷新Booleantruetrue | false
refresherConfig下拉刷新组件配置(refreshTextrefreshingTexttextSizetextColoriconiconSizeiconColorSnRefresherParams{}-
refresherThreshold下拉刷新阈值(单位 px,仅自定义刷新样式下生效)Number45-
refresherMaxDragDistance下拉最大拖拽距离(单位 px,App 端生效)Number0-
refresherBackground下拉刷新区域背景颜色Stringtransparent-
refresherDefaultStyle下拉刷新默认样式;开启下拉刷新时组件强制使用自定义刷新条Stringwhitewhite | black | none
loadmore是否开启加载更多(触底自动触发,底部显示加载状态条)Booleantruetrue | false
loadmoreConfig加载更多组件配置(loadmoreTextnomoreTextloadingTexttextSizetextColoriconSizeiconColorlineHeightlineColordasheddisabledSnLoadmoreParams{}-
backtop是否内置回到顶部按钮Booleanfalsetrue | false
backtopTarget内置回到顶部按钮的绑定目标(ref 名或元素 id)String''-
backtopTop内置回到顶部按钮的显示阈值(滚动距离,单位 px)Number400-
backtopRight内置回到顶部按钮距右边界距离(单位 px)Number30-
backtopBottom内置回到顶部按钮距下边界距离(单位 px)Number100-
bounces是否启用回弹效果(App 端生效)Booleantruetrue | false
associativeContainer关联的滚动容器(App 端嵌套滚动场景使用)String''-
nested是否开启嵌套滚动模式,为 true 时自动关联嵌套滚动容器Booleanfalsetrue | false
customNestedScroll子元素是否开启嵌套滚动协商(仅 Android 端生效)Booleanfalsetrue | false
nestedScrollChild嵌套滚动的子容器元素 idString''-
upperThreshold距顶部/左边多远时(单位 px)触发 scrolltoupper 事件Number50-
lowerThreshold距底部/右边多远时(单位 px)触发 scrolltolower 事件Number50-
scrollTop设置竖向滚动条位置Number0-
scrollLeft设置横向滚动条位置Number0-
scrollIntoView值应为某子元素 id(id 不能以数字开头),滚动到该元素String''-
scrollWithAnimation设置滚动条位置时是否使用滚动动画Booleantruetrue | false
showScrollbar是否显示滚动条Booleantruetrue | false
androidOverscrollAndroid 端是否开启弹簧回弹效果Booleanfalsetrue | false
androidScrollbarDraggableAndroid 端滚动条是否可拖拽Booleanfalsetrue | false
androidRefresherColorAndroid 端下拉刷新默认样式颜色String''-
enableBackToTop点击状态栏回到顶部(iOS 端生效)Booleanfalsetrue | false
enablePassive是否开启 passive 滚动监听(仅 Web 端)BooleanWeb 端 true,其他端 falsetrue | false
customStyle自定义根节点样式UTSJSONObject | String''-
customClass自定义根节点外部样式类String''-

下拉刷新区域文案与样式配置:refreshText(下拉中)、refreshingText(刷新中)、textSizetextColoriconiconSizeiconColor

sn-loadmore / 列表加载更多的文案与样式配置:loadmoreText(加载前)、nomoreText(没有更多)、loadingText(加载中)、textSizetextColoriconSizeiconColorlineColorlineHeightdashed(线条虚线)、disabled

事件

名称类型说明
scrolltoupper(e: UniScrollToUpperEvent) => Void滚动到顶部/左边时触发,同时内部复位下拉刷新条
scrolltolower(e: UniScrollToLowerEvent) => Void滚动到底部/右边时触发,开启 loadmore 时自动触发加载
scroll(e: UniScrollEvent) => Void滚动时触发
scrollend(e: UniScrollEvent) => Void滚动结束时触发(App 端)
refresherpulling(e: UniRefresherEvent) => Void下拉刷新控件被下拉时触发
refresherrefresh(e: UniRefresherEvent) => Void下拉刷新被触发时触发,同时置位 refresher-triggered
refresherrestore(e: UniRefresherEvent) => Void下拉刷新被复位时触发
refresherabort(e: UniRefresherEvent) => Void下拉刷新被中止时触发(App 端)
startnestedscroll(e: UniStartNestedScrollEvent) => Void嵌套滚动开始时触发
nestedprescroll(e: UniNestedPreScrollEvent) => Void嵌套滚动预滚动协商时触发
stopnestedscroll(e: UniStopNestedScrollEvent) => Void嵌套滚动结束时触发
loadmore() => Void触底或点击加载状态条时触发,仅在开启 loadmore 且状态为 loadmore 时生效,触发后状态自动变为 loading

方法

名称参数返回值描述
scrollTotop: Number, left: Number(默认 0)-滚动到指定位置(单位 px),Web 端带平滑动画
registerBacktopupdate: (scrollTop: Number) => Void-注册滚动位置更新回调,供 sn-backtop 绑定(一般无需手动调用)
startRefresh--主动触发下拉刷新,进入刷新中状态并置位 refresher-triggered
stopRefresh--结束下拉刷新,恢复可下拉状态并复位 refresher-triggered

插槽

名称说明
default滚动内容区域,放置任意内容

使用 MIT 协议