Skip to content

PullRefresh 下拉刷新 ​

移动端下拉刷新容器组件:默认插槽为滚动内容(列表等),容器自身为滚动盒(高度由宿主约束)。列表滚到顶部继续下拉时露出顶部指示区,随拉动位移跟手(阻力曲线渐近位移上限);释放超过阈值触发刷新——派发 oas-refresh 并停驻阈值高度进「刷新中」视觉,宿主完成异步刷新后移除 refreshing 属性,组件播「刷新成功」文案随后回弹复位。桌面端鼠标按住纵向拖拽同效(pointer events 统一),滚轮滚动不受干扰。配色走语义 token,暗色主题自动适配。

基础用法 ​

给容器一个固定高度(宿主约束),内容为普通列表。触屏在列表顶部继续下拉;桌面按住鼠标左键纵向拖拽同效。释放后宿主置 refreshing 开始异步刷新,完成后移除(demo 模拟 900ms 数据拉取)。

下拉刷新 + 事件可见反馈

列表项 01 —— 在顶部继续下拉试试
列表项 02
列表项 03
列表项 04
列表项 05
列表项 06
列表项 07
列表项 08
列表项 09
列表项 10
列表项 11(滚回顶部再下拉可再次触发)

在列表内从顶部向下拉 →

阈值与阻力 ​

threshold(默认 60px)决定释放时触发刷新所需的拉动位移;max-pull(默认 100px)为位移上限——拉动位移按阻力曲线 pull = maxPull × (1 − e^(−dy/maxPull)) 渐近上限(每像素增益递减,模拟「物理阻尼」手感)。位移过阈值后指示区箭头翻转、文案变「松开立即刷新」;不足阈值释放则回弹归零,无任何副作用。

threshold=40 / max-pull=160:更轻的触发与更长的行程

列表项 01 —— 下拉 40px 以上松手即触发
列表项 02
列表项 03
列表项 04
列表项 05
列表项 06
列表项 07
列表项 08

试试更短的拉动距离 →

禁用 ​

disabled 全禁手势(config-provider 全局禁用注入同效):拖拽中置位立即取消回弹,不派发任何事件。

disabled:手势不响应

列表项 01 —— 拉动无响应(已禁用)
列表项 02
列表项 03
列表项 04
列表项 05

disabled 下拉动不会触发 oas-refresh

滚动协调与可访问性 ​

  • 容器带 overscroll-behavior-y: contain(防滚动链:顶部继续下拉不会把滚动传给页面或触发页面级下拉刷新)与 touch-action: pan-y;指针起始于顶部且向下拉时组件接管手势并 preventDefault 阻断原生滚动,起始于非顶部或向上拉则完全放行原生滚动。
  • 滚轮滚动不受影响(手势只由 pointer 拖拽触发)。
  • 指示区 role="status" + aria-live="polite":状态文案切换(下拉刷新 → 松开立即刷新 → 刷新中… → 刷新成功)读屏自动播报;组件不抢键盘焦点,内容语义完全由宿主提供。
  • prefers-reduced-motion 下回弹/翻转过渡停用(状态切换瞬时完成,spinner 保留)。

API ​

oas-pull-refresh ​

属性 ​

属性说明类型默认值
disabled全禁下拉手势(config-provider 全局禁用注入同效);拖拽中途置位立即取消回弹,不派发事件boolean—
max-pull拉动位移上限(px,默认 100):阻力曲线 pull = maxPull × (1 − e^(−dy/maxPull)) 渐近上限,增益递减——
refreshing刷新中(宿主受控):oas-refresh 派发后宿主置 true 开始异步刷新,完成后移除;组件播 success 文案约 600ms 后回弹复位;refreshing 期间再次下拉忽略;无手势直接置位(程序性刷新)同样停驻刷新中视觉、不派发事件boolean—
threshold触发刷新的下拉阈值(px,默认 60):释放时拉动位移达到该值才派发 oas-refresh;非法/非正回落默认,生效值夹取不超过 max-pull——

事件 ​

事件说明
oas-refresh下拉位移达到阈值后释放时派发一次;组件停驻阈值高度进刷新中视觉,等宿主置 refreshing(不置则保持停驻等待宿主)

插槽 ​

名称说明
默认滚动内容(列表等);容器自身为滚动盒(overflow-y: auto),高度由宿主约束

CSS 变量 ​

CSS 变量默认值
--oas-pull-refresh-indicator-height48px
--oas-pull-refresh-label-colorvar(--oas-color-text-secondary)
--oas-pull-refresh-spinner-colorvar(--oas-color-primary)

Parts ​

Part说明
root滚动盒容器(overflow-y: auto + 防滚动链)
track位移层(拉动 transform 承载,回弹过渡)
indicator指示区(role="status" + aria-live="polite")
arrow下拉箭头(过阈值翻转,刷新中/成功态隐藏)
spinner刷新中旋转指示器(与箭头互斥)
label状态文案(i18n 四态)
content内容区(默认插槽投影)

基于 MIT OR Apache-2.0 双许可发布