Skip to content

n-back-top 返回顶部 ​

页面或滚动容器下滑超过阈值后出现的返回顶部按钮:页面滚动时组件自动回顶,滚动容器场景由调用方控制回顶;图标、文字、形状、尺寸、位置与外观均可配置。

平台兼容性 ​

App Web 微信小程序
✓ ✓ ✓

自动模式依赖页面滚动(onPageScroll);scroll-view 等容器滚动不触发页面滚动回调,此类场景请传入容器滚动位置。默认形态为图标 + 提示文字(文字跟随语言),显式传空字符串可只保留图标。组件根据当前滚动位置和阈值实时计算显隐,修改阈值或切换自动/受控模式会立即更新。组件可自动避让 n-page 的固定 footer;其他固定底栏或 tabbar 请通过 bottom 设置距离。

基本用法 ​

页面级场景零接线,组件自动监听页面滚动,超过阈值出现、点击回顶:

html
<template>
  <n-back-top />
</template>

scroll-view 等容器滚动场景,把容器的滚动位置受控传入,点击回调里自行控制容器回顶:

html
<template>
  <scroll-view :scroll-top="scrollTop" @scroll="onScroll">
    <!-- 长内容 -->
  </scroll-view>
  <n-back-top :scroll-top="scrollTop" @click="scrollTop = 0" />
</template>
<script setup lang="uts">
  const scrollTop = ref(0);
  function onScroll(event: UniScrollEvent): void {
    scrollTop.value = event.detail.scrollTop;
  }
</script>

自定义内容用默认插槽整钮替换(出现时机、定位与点击回顶仍由组件负责):

html
<n-back-top>
  <image src="/static/top.png" style="width:24px;height:24px" />
</n-back-top>

API ​

属性 ​

属性 类型 默认值 说明
scroll-top number | string | null null 滚动位置受控值(scroll-view 等容器滚动场景,由容器滚动回调传入);null 时自动监听页面滚动
threshold number | string 320 显示阈值:滚动位置大于该值时显示按钮;字符串须为数字
top number | string | null null 显示阈值别名,兼容 top 命名;同时设置 top 与 threshold 时以 top 为准
duration number | string 100 回到顶部的滚动动画时长(毫秒),0 表示立即到位;字符串须为数字
shape string "circle" 按钮形状,合法值 circle / square,非法值按 circle 处理;参考源已标注废弃的 mode 由此属性承接
icon string "up" 图标名(n-icon 内置表或 registerIconFont 注册名)或图片路径(含 / 时按图片渲染);空字符串不渲染图标
text string | null null 图标下方的文字;null 使用内置文案(跟随语言),空字符串不渲染;与图标纵排
size number | string -1 按钮最小宽高,数字或 px/rpx 字符串;-1 使用主题尺寸(48px),文字较宽时宽度自适应撑开
width number | string -1 固定宽度;-1 使用 size 作为最小宽度,文字较宽时仍可撑开
height number | string -1 固定高度;-1 使用 size 作为最小高度
bottom number | string 100 距视口底部的距离,数字或 px/rpx 字符串;n-page 有固定 footer 时取该值与 footer 预留高度的较大值
right number | string 20 距视口右侧的距离,数字或 px/rpx 字符串
background string "" 背景色;参考源同功能属性名为 bgColor,本库采用 background 命名;空字符串使用主题表面色(深浅自适应)
icon-color string "" 图标颜色;空字符串使用主题文字色
text-color string "" 文字颜色;空字符串使用主题次要文字色
icon-size number | string -1 图标尺寸,数字或 px/rpx 字符串;-1 使用主题尺寸(19px)
text-size number | string -1 文字字号,数字或 px/rpx 字符串;-1 使用主题字号(12px)
z-index number | string 100 层级;字符串须为整数
custom-class string "" 挂到根节点的额外 class(类须在组件样式表内定义,页面 class 打不进组件)
custom-style string "" 根节点行内样式

事件 ​

事件 参数 说明
click UniEvent 点击按钮时触发,参数为原生事件;自动页面模式已执行 pageScrollTo,受控模式由调用方处理容器回顶
error 配置非法时触发,参数为 {prop, message};非法期间按钮不渲染,修正后按当前滚动位置立即恢复

插槽 ​

名称 说明 参数
default 整钮替换按钮内容(任意节点形态);点击统一回顶,定位与出现时机仍由组件承担 —

实现说明(机制对照) ​

机制 参考做法 本库做法 分歧理由
显隐来源 两参考为受控值 + 阈值(页面回调传值);另一参考为容器上下文自动 / 受控值双通道 scrollTop=null 自动监听页面滚动(官方页面生命周期,组件内合法),传值后受控 与参考双通道语义一致;自动通道不依赖页面容器体系,页面级场景零接线
显隐与滚动值 两家参考用 scrollTop 表示受控滚动值,分别用 top / threshold 表示阈值;另一家的 top 表示受控滚动值,阈值为屏高减 100 scrollTop 统一表示受控滚动值;threshold 为阈值,并提供 top 阈值别名;同时设置 top 与 threshold 时 top 优先 解决参考中 top 命名冲突:保留前者的 top 阈值语义,后者同类受控滚动能力由 scrollTop 承接;阈值默认采用前者的 320
回顶动作 内部 pageScrollTo + duration / 固定 120ms;另一参考走容器上下文 自动页面模式调用 uni.pageScrollTo({scrollTop:0, duration}),duration 默认 100 可调;受控模式只发 click,由调用方操作容器 页面和容器滚动目标不同,避免容器模式误滚页面
形状 一家参考 shape 取 circle / square(mode 已标注废弃);另两家固定圆形 shape 取 circle / square 跟随未废弃的官方属性名
按钮 width/height 独立 / 固定宽度 size 最小宽高,width/height 可选覆盖;文字较宽时宽度自适应 保留参考独立尺寸能力,同时支持文字内容自然撑开
位置 bottom / right 属性;一家参考根据自有 tabbar / footer 上下文偏移,另两家使用固定默认值 bottom/right 数字或 px/rpx 字符串;位于 n-page 内时自动避开其固定 footer,其他固定底栏由 bottom 调整 自动测量复用本库 n-page 的 footer 上下文;不依赖或猜测调用方自建 tabbar/footer 的尺寸
外观 图标/文字尺寸颜色与背景逐项 prop background / iconColor / textColor / iconSize / textSize,空值走主题令牌(深浅自适应) 同参对齐;空值令牌化承接深浅主题
进出场 参考直接显隐 阈值控制挂载与卸载,不附加动画 对齐参考直接显隐,隐藏态不留透明节点拦截页面触摸
事件 click click 另一参考的 backTop 改名对齐库内统一命名
默认值口径 duration 100 / 一家参考 top=400 / 另一家 threshold=320 / bottom 100 / right 20 / width/height 48 / zIndex 100 / iconSize 19 duration 100;threshold=320 取第二家默认,top 默认 null 为阈值别名(显式 top 优先);bottom 100 / right 20 / size 48 / zIndex 100 / iconSize 主题 19 冲突默认值择用 threshold=320 一方;其余默认跟随另一参考官方值
提示文字默认 text 默认"返回"(图标+文字默认形态) text 默认 null 走语言包内置文案(跟随语言切换),显式空串只保留图标 同一默认形态;文案经 locale 承接多语言
图标来源 图标名或图片路径 同支持:值含路径分隔符按图片渲染,其余按图标字体名 与参考一致的判别口径
插槽语义 default 自定义按钮的所有内容 default 整钮替换;点击统一回顶(返回顶部是按钮唯一语义) 与参考一致;不提供按钮组形态(那是悬浮动作按钮组件的场景)

记录 · 思考 · 创作