Skip to content

n-scroll-list 横向滚动列表 ​

内容横向排列超出容器宽度时滑动浏览的容器:隐藏原生滚动条保持界面干净,可选底部自绘滑动指示器(轨道 + 滑块,随滚动实时位移),滚动到最左/最右端触发事件。典型场景:分类入口、商品横滑区、标签流、排行榜横排卡片。

内容放默认插槽自行排布(横向一行,多行内容请自行包一层纵向容器),组件不管理内容项与数据。scroll 控制是否允许滚动,indicator 独立控制指示器显示。内容不足以滚动时指示器自动隐藏。尺寸传 -1 或字符串 "-1" 时使用主题令牌,默认 48 / 16 / 4px;数字和数字字符串为 px,也可直接配置 px / rpx 长度,宽度还支持百分比。

平台兼容性 ​

App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序
√ √ √ × × × ×

如何调用 ​

html
<n-scroll-list>
  <view style="flex-direction:row">
    <!-- 内容项,横向排列 -->
  </view>
</n-scroll-list>

API ​

属性 ​

参数 说明 类型 默认值 可选值
scroll 是否允许横向滚动,关闭时保留当前位置 Boolean true -
indicator 是否显示底部滑动指示器;内容不足时自动隐藏 Boolean true -
indicatorWidth 轨道总宽;-1 跟随主题令牌,默认 48px String / Number -1 -1、有限正数、正数 px/rpx/% 长度
indicatorBarWidth 滑块宽;-1 跟随主题令牌,默认 16px;超出轨道自动限宽 String / Number -1 -1、有限正数、正数 px/rpx/% 长度
indicatorHeight 轨道高,滑块同高;-1 跟随主题令牌,默认 4px String / Number -1 -1、有限正数、正数 px/rpx 长度
indicatorColor 轨道色,空则跟随主题弱填充(随深浅主题切换) String "" CSS 色值
indicatorActiveColor 滑块色,空则跟随主题品牌色 String "" CSS 色值
indicatorCap 轨道与滑块两端形态 String "round" round / square
indicatorStyle 指示器容器行内样式,最后应用,可覆盖与内容的间距 String "" -
customClass 根节点类,须在组件样式表内定义 String "" -
customStyle 根节点行内样式,最后应用,可设置背景和外边距等 String "" -

事件 ​

事件名 说明
left 滚动到最左端时触发;进入边界沿触发,停在边界拖动不重复触发
right 滚动到最右端时触发;触发规则同 left
error 指示器配置非法时触发,参数 NScrollListError:{prop: string, message: string};仅停显指示器,滚动不受影响,修正后自动恢复

插槽 ​

插槽名 说明
default 滚动内容;组件内容行为横向 flex,内容项间距用 margin 表达,多行内容请自行包一层纵向容器

方法 ​

方法名 说明
measure 手动重新测量容器、内容、轨道与滑块;自动尺寸检测尚未完成时可主动请求

样式令牌 ​

CSS 变量 默认值 作用
--n-scroll-list-track-w 48px 指示器轨道总宽
--n-scroll-list-thumb-w 16px 指示器滑块宽
--n-scroll-list-track-h 4px 指示器轨道高
--n-scroll-list-gap 12px 指示器与内容的间距

实现说明 ​

能力 常见做法 本组件做法与取舍
滚动容器 scroll-view 加 scroll-x 使用官方 direction:scroll 为 true 时 horizontal,为 false 时 none;不依赖触摸拦截
原生滚动条 各端 CSS 伪元素逐端隐藏 使用 scroll-view 的 show-scrollbar 属性,各端声明式关闭,无样式补丁
指示器跟手 wxs / bindingx 响应层 scroll-view 的 scroll 事件驱动响应式滚动位置,滑块以 transform 位移,不用脚本注入
尺寸与单位 数字 / 字符串指定尺寸,计算滑块行程 数字统一为 px;px/rpx/% 长度由原生样式解析,轨道和滑块测量值决定行程;-1 保留 CSS 变量与 SCSS 默认值,修正令牌后无需手动换算
滑块宽度 固定宽度,超宽配置可能溢出 固定宽度可配,以轨道实际宽度限宽;行程为轨道宽减滑块宽,滚动比例经 [0,1] 截断
到边事件 依赖平台 scrolltoupper/scrolltolower(端差异大:H5 端横向边界事件不派发) scroll 事件坐标统一判定(到边阈值 1px),组件侧沿触发:初始停在最左端不触发,回到中间区后才重新进入判定,边界反复拖动不重复派发;各端行为一致
内容不足 指示器仍在原位 可滚动宽度不足 1px 视为不可滚,指示器整体隐藏,避免一条停在端点的死滑块
尺寸重测 暴露 init 手动重测 容器、内容及指示器尺寸自动重测;App / Web 使用元素尺寸观察,小程序使用组件库共享的 200ms 布局检测,隐藏页面及卸载停止观察;另暴露 measure
参数错误 默认值替代非法配置 尺寸非法或形态非法触发 error 并停显指示器,滚动本体不受影响;修正后自动恢复

尺寸默认值只在样式令牌定义,脚本不再复制尺寸常量。主题尺寸、百分比与 rpx 变化后,布局测量完成即更新滑块行程;小程序自动检测存在最多一个检测周期的延迟,measure 也通过下一次布局测量异步生效。百分比轨道宽相对指示器容器,百分比滑块宽相对轨道。关闭滚动仍保留指示器,隐藏指示器仍允许滚动。

指示器默认色不设专属色:轨道读主题弱填充、滑块读主题品牌色,随深浅主题切换。indicatorStyle 与 customStyle 最后应用,可覆盖默认样式;指示器与内容默认间距 12px,可用 indicatorStyle 的 margin-top 覆盖。组件不管理内容项、分页与滚动定位。

记录 · 思考 · 创作