代码演示
如何引入
<script setup lang="ts">
import { BackTop } from '@fibrous/semi-ui-vue';
</script>
基本用法
BackTop 是一个 FloatButton,滚动超过 visibilityHeight 后出现,点击后把 target 滚动到顶部。默认显示回到顶部图标,可访问名称默认取自语言包(简体中文为「回到顶部」),可以通过 aria-label 覆盖。
Scroll down to see the bottom-right gray button.
代码
<script setup lang="ts">
import { BackTop } from '@fibrous/semi-ui-vue';
</script>
<template>
<div>
<span>Scroll down to see the bottom-right gray button.</span>
<BackTop aria-label="Back to top" />
</div>
</template>自定义样式
BackTop 默认距离底部 50px、距离右侧 100px(RTL 下为左侧),可以用 style 覆盖。
外观通过 FloatButton 的 #icon 插槽与 shape、size、colorful、badge 定制。
向下滚动,右下角会出现一个方形的多彩按钮。
代码
<script setup lang="ts">
import { IconArrowUp } from '@fibrous/semi-icons-vue';
import { BackTop } from '@fibrous/semi-ui-vue';
</script>
<template>
<div>
<span>向下滚动,右下角会出现一个方形的多彩按钮。</span>
<BackTop aria-label="回到顶部" colorful shape="square" size="large" style="bottom: 100px">
<template #icon>
<IconArrowUp />
</template>
</BackTop>
</div>
</template>API 参考
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| duration | 滚动到顶部所需的毫秒数;点击事件按此间隔节流。 | number | semiDefault("BackTop", "duration", 450) |
| target | 返回被监听滚动的元素的函数,未设置时为 window;返回 null 表示节点尚不可用。挂载时调用,函数本身变化时重新调用;模板 ref 在父组件 mounted 之前已赋值,可直接读取。 | Type(() => Window | HTMLElement | null) | undefined |
| visibilityHeight | 出现 BackTop 需要达到的滚动高度。 | number | semiDefault("BackTop", "visibilityHeight", 400) |
| badge | 徽章参数,同 FloatButton。 | FloatButtonBadge | semiGlobalDefault("BackTop", "badge") |
| colorful | 多彩按钮,同 FloatButton;未设置时取 FloatButton 的默认值。 | boolean | semiGlobalDefault("BackTop", "colorful") |
| shape | 形状,可选 round、square;未设置时取 FloatButton 的默认值。 | "square" | "round" | semiGlobalDefault("BackTop", "shape") |
| size | 尺寸,可选 default、small、large;未设置时取 FloatButton 的默认值。 | "small" | "default" | "large" | semiGlobalDefault("BackTop", "size") |
Events
| 事件 | 说明 | 回调参数 |
|---|---|---|
| click | 点击时触发,载荷为原生 click 事件;按 duration 节流,发出时滚动已开始。 | [event: MouseEvent] |
Slots
| 插槽 | 说明 | 作用域参数 |
|---|---|---|
| default | 按钮内的静态内容,代替图标显示;不能包含可交互元素。 | any |
| badgeCount | 自定义徽章内容,代替 badge.count。 | any |
| icon | 按钮图标,默认 IconBackTop。 | any |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| 无 |
class、style 与原生属性(如 data-*、aria-*)经 attrs 传入,落在按钮上。click 声明为事件,会遮住根元素的原生 click 监听,并按 duration 节流。target 读取模板 ref 时,ref 在父组件 mounted 之前已赋值;稳定的 target 函数晚于挂载才返回元素时不会重新绑定,需要重新挂载 BackTop。组件 ref 的 $el 在可见时是 <button>,不可见时是占位注释节点。
Accessibility
ARIA
- BackTop 渲染为单个原生按钮
<button type="button">,读屏软件读作按钮 - 可访问名称取自
aria-label;没有时,传入了按钮内容则取按钮内容,否则取语言包中的默认名称(简体中文为「回到顶部」) children(Vue 中为默认插槽)是按钮内的静态内容,会成为按钮名称的一部分;按钮内不能嵌套可交互元素
键盘和焦点
- 按钮显示后可以用 Tab 及 Shift + Tab 聚焦,聚焦时按 Enter 或 Space 滚动到顶部
- 键盘聚焦时显示聚焦轮廓
设计变量
下表是组件内部的 Sass 变量,不能覆写。定制样式请覆写 --semi-* CSS 变量(见 Design Token 页),或写不分层的 CSS 规则。
| Sass 变量 | 值 | 用法 |
|---|---|---|
| $spacing-backtop-right | 100px | 返回顶部距离右侧距离 |
| $spacing-backtop-bottom | 50px | 返回顶部距离底侧距离 |