Skip to content

Tour 引导 ​

分步功能引导,带全屏遮罩与目标高亮。支持 12 向定位与溢出翻转、滚动跟随、遮罩/形态定制、键盘导航、异步步骤、hints 信标与「不再显示」记忆。

基础用法 ​

开始引导

开始引导
高亮区域一
高亮区域二

引导事件 ​

oas-step 步骤切换携带 detail: { index, current, total, next, prev };关闭类事件(cancel/finish/close/skip/destroy)携带 detail: { index, total }(其中 oas-cancel 额外携带 source 标识取消来源)。

步骤事件

开始引导尚未开始
高亮区域一
高亮区域二

受控步骤与开关 ​

open 与 current 均为受控属性:外部按钮 / JS 设置 open 启动引导,设置 current 直接跳到指定步骤(无需逐步点击)。

受控 open / current

开始引导(设置 open)跳到第 2 步(current=1)跳到第 3 步(current=2)结束(移除 open)
受控高亮区域一
受控高亮区域二
受控高亮区域三

定位与箭头 ​

placement 支持 12 向(top/bottom/left/right × start/end/center)+ center,空间不足时自动沿主轴翻转;arrow="false" 隐藏箭头。

12 向定位与自动翻转

右侧定位(placement=right)贴底自动翻转无箭头(arrow=false)
右侧定位目标
多向定位目标
贴底目标(视口底部)

滚动到目标与重定位 ​

目标在视口外时自动滚动到目标(scroll-into-view-options 透传,scroll-padding 写目标 scroll-margin 留白);引导期间滚动/resize 高亮与弹层自动跟随(auto-reposition,默认开启)。

滚动到目标与滚动跟随

开始引导(目标在页面下方)
下方目标一(滚动到这里)
下方目标二

遮罩与形态 ​

mask="false" 关闭遮罩(非模态,引导期间页面其余区域可交互);mask='{"color":"..."}' 定制遮罩颜色;type="primary" 主色底弹层强调;gap 控制高亮内边距与圆角(数字或 {padding, radius})。

非模态 + 主色弹层

非模态 + 主色弹层自定义遮罩颜色
非模态高亮一
非模态高亮二

键盘导航与指示器 ​

keyboard(默认开启)支持 ←/→ 推进步骤;show-bullets 圆点指示器可点击跳步;show-progress 顶部进度条;progress-text 模板(占位符 current/total,各以双花括号包裹)自定义计数文本;indicators="number" 数字计数。

键盘导航 + 圆点 + 进度条

开始引导(键盘 + 圆点 + 进度条)关闭键盘导航
键盘导航目标一
键盘导航目标二
键盘导航目标三

按钮显隐与透传 ​

hide-prev / hide-skip / hide-next / hide-counter 控制按钮与计数显隐;next-button-props / prev-button-props / skip-button-props 透传任意属性到对应按钮(JSON 对象)。末步的「完成」由 next 按钮承载(文案切「完成」);此时 finish-button-props 叠加在 next-button-props 之上(step 级优先)。

按钮显隐与属性透传

按钮显隐 + props 透传隐藏全部操作
按钮定制目标一
按钮定制目标二

关闭按钮定制 ​

show-close="false" 隐藏关闭按钮;close-icon 自定义关闭按钮内容(HTML)。

关闭按钮定制

自定义关闭图标无关闭按钮
关闭按钮定制目标

遮罩点击与高亮区交互 ​

mask-click-behavior:close(默认)/ next(点击遮罩推进)/ none(忽略);target-area-clickable 高亮区可点击(点击穿透目标);disabled-interaction 禁止高亮区交互;advance-on-click 点击高亮区推进(交互式引导「点这里试试」)。

遮罩点击行为 + 高亮区交互

遮罩点击推进遮罩点击忽略高亮区可交互禁止高亮区交互点击高亮区推进目标内按钮未被点击
高亮交互目标一 点我验证可交互
高亮交互目标二

异步步骤 ​

wait-for-element(毫秒)等待目标出现(如「上一步点击打开了弹窗,等里面元素渲染」);skip-missing-element 目标缺失/等待超时自动跳过该步骤。

异步目标等待与跳过

等待异步目标跳过缺失目标
普通目标

对话框模式 ​

mode="dialog"(或 step 级 mode: "dialog")无目标居中对话框步骤,作为一等形态混入引导。

对话框模式

开始引导

生命周期事件 ​

oas-highlight-start 在步骤 index 变化时即派发(先于异步目标等待),oas-highlight-end 在高亮定位完成后派发(目标异步等待命中后才进入定位);oas-destroy 在引导关闭时派发(含外部移除 open)。

生命周期事件

开始引导尚无事件
生命周期目标一
生命周期目标二

不再显示与多页引导 ​

dont-show-again 关闭时勾选「不再显示」,经 storage-key 记忆到 localStorage,下次启动被拦截并派发 oas-dismiss;persist 把 open/current 状态持久化,路由切换重新挂载后自动恢复(多页引导)。

「不再显示」记忆

打开引导(已记忆则不显示)清除记忆
记忆目标

多页引导(persist)

开始引导模拟路由切换(重新挂载)
多页目标一
多页目标二

打字机与锁滚动 ​

typewriter(opt-in,未设置即不开)+ typewriter-speed 描述逐字显示动画;lock-scroll 引导期间锁定页面滚动;close-on-press-escape="false" 关闭 Esc。

打字机动画 + 锁滚动

开始引导
打字机目标一(含 cover 封面)
打字机目标二

hints 信标模式 ​

hints 常驻脉冲信标(无需 open),点击弹出气泡;dismissable + id 的提示关闭后记忆到 localStorage(oas-tour-hint-${id})不再显示。

hints 信标模式

信标目标一(dismissable)
信标目标二(常驻)

挂载点与层级 ​

append-to="body"(或选择器)把整个浮层挂载到指定容器;z-index 定制层级。

挂载点与层级

append-to body + 高层级
挂载目标

高级定制(gap 双轴 / 箭头指向 / 关闭自动翻转) ​

gap 支持 offset 双轴外扩(number 四周同值 / [水平, 垂直] 数组,与 padding 正交);arrow-point-at-center 让箭头在弹层被视口避让偏移后仍指向目标中心;auto-reposition="false" 关闭溢出翻转与视口避让(保持声明 placement)。

gap 双轴 + 箭头指向中心 + 关闭自动翻转

gap 双轴 offset箭头指向中心关闭自动翻转
gap 双轴目标
贴左目标
贴底目标(视口底部)

自定义指示器与动作区(插槽) ​

slot="indicators" 替换内置圆点/数字指示器(宿主用 oas-step 事件的 current/total 渲染);slot="actions" 替换整个内置按钮区,用自定义按钮控制跳步。

自定义指示器与动作区

开始引导1 / 2
上一步下一步
自定义插槽目标一
自定义插槽目标二

API ​

oas-tour ​

属性 ​

属性说明类型默认值
advance-on-click点击高亮区推进下一步(交互式引导)boolean—
append-to挂载点:body 或 CSS 选择器(整个浮层移入目标容器)string—
arrow是否显示箭头(布尔,默认 true,false 隐藏)stringtrue
arrow-point-at-center箭头指向目标中心投影(弹层被视口避让偏移后仍指准;默认箭头贴 placement 对齐端)boolean—
auto-reposition滚动/resize 时自动重定位 + 溢出翻转/视口避让(默认 true;false 关闭翻转与避让,保持声明位置)stringtrue
close-icon自定义关闭按钮内容(HTML 字符串)string—
close-on-press-escapeEsc 关闭(默认 true)stringtrue
current当前步骤索引string0
disabled-interaction禁止高亮区交互(拦截层覆盖目标)——
dont-show-again「不再显示」开关(布尔;关闭时勾选则记忆到 localStorage)boolean—
finish-button-props末步「完成」按钮透传属性(JSON):末步 next 即完成按钮,finish-button-props 叠加在 next-button-props 之上(step 级优先)——
gap高亮内边距:数字(padding px)或 {"padding","radius","offset"};offset 为高亮外扩间距(number 四周同值 / [水平, 垂直] 双轴,与 padding 正交);默认 padding 4string—
hide-counter隐藏步骤计数boolean—
hide-next隐藏下一步按钮——
hide-prev隐藏上一步按钮——
hide-skip隐藏跳过按钮——
hintshints 信标模式:JSON [{id,selector,title,description,placement,dismissable}],常驻脉冲点,点击弹气泡,dismissable 关闭后记忆string[]
indicators计数样式:dots(默认)/ number / nonestringdots
keyboard键盘 ←/→ 推进步骤(默认 true,false 关闭)stringtrue
lock-scroll引导期间锁定页面滚动(关闭恢复)boolean—
mask遮罩开关/定制:false 关闭(非模态)或 {"color","style"} 定制颜色样式(默认 true);step 级可覆盖stringtrue
mask-click-behavior遮罩点击行为:close(默认)/ next(推进)/ none(忽略)stringclose
mode弹层模式:popup(默认)/ dialog(无目标居中对话框);step 级可覆盖stringpopup
next-button-props下一步按钮透传属性(JSON 对象,如 {"data-x":"1"})——
open开始引导(布尔属性,存在即启动)boolean—
persist多页引导:open/current 状态持久化到 localStorage,重新连接时恢复boolean—
placement弹层方位:12 向(top/bottom/left/right × start/end/center)+ center(空 target 居中);默认 bottom;空间不足自动翻转;step 级可覆盖TourPlacementbottom
prev-button-props上一步按钮透传属性(JSON 对象)——
progress-text进度文本模板:以双花括号包裹的 current/total 占位符替换(如 current/total 各包一层花括号);设置后计数区用模板渲染string—
scroll-into-view-options滚动到目标的 scrollIntoView options(JSON,默认 {"behavior":"smooth","block":"center"})string—
scroll-padding滚动到目标时的留白(px,写目标 scroll-margin)——
show-bullets圆点指示器(点击圆点跳步)boolean—
show-close显示关闭按钮(默认 true,false 隐藏)stringtrue
show-progress弹层顶部进度条(宽度随步骤推进)boolean—
skip-button-props跳过按钮透传属性(JSON 对象)——
skip-missing-element目标缺失/等待超时跳过该步骤(默认停在当前步骤)boolean—
steps步骤 JSON(TourStep[] | string);property 赋值支持函数/元素 targetTourStep[] | string[]
storage-keylocalStorage 记忆键(dont-show-again / persist / hint dismiss 共用)stringoas-tour-dismiss
target-area-clickable高亮区可交互(opt-in):未设置即关闭(拦截层覆盖目标、不可点);设置后拦截层隐藏、点击穿透目标string—
type弹层类型:default / primary(主色底弹层,非模态场景强调)stringdefault
typewriter打字机动画(opt-in):未设置即不开;设置后描述逐字显示,typewriter="false" 关闭string—
typewriter-speed打字机速率(ms/字符,默认 20)string20
wait-for-element等待目标出现(毫秒,异步步骤;全局默认,step 级 waitForElement 优先)——
z-index遮罩层级(默认 --oas-z-modal)——

事件 ​

事件说明
oas-cancel跳过 / Esc / 遮罩点击关闭,detail: { index, total, source }(source: skip/esc/close/mask)
oas-close点击关闭按钮,detail: { index, total }
oas-destroy引导关闭(含外部移除 open),detail: { index, total }
oas-dismiss「不再显示」命中,引导启动被拦截,detail: {}
oas-finish最后一步点击「完成」,detail: { index, total }
oas-highlight-end步骤高亮完成,detail: { index, total }
oas-highlight-start步骤高亮开始(异步等待命中后),detail: { index, total }
oas-skip点击「跳过」按钮,detail: { index, total }
oas-step步骤切换,detail: { index, current, total, next, prev }

插槽 ​

名称说明
actions自定义动作区(替换整个内置按钮区;有内容时隐藏内置 prev/skip/next 按钮)
cover步骤封面富内容(插槽优先于 step.cover 图片)
indicators自定义指示器区(宿主用 oas-step 的 current/total 渲染;有内容时隐藏内置圆点/数字指示器)

CSS 变量 ​

CSS 变量默认值
--oas-glass-blurnone
--oas-glass-ringtransparent
--oas-tour-arrow-align-offset16px
--oas-tour-arrow-height12px
--oas-tour-arrow-radius0
--oas-tour-arrow-width12px
--oas-tour-mask-colorvar(--oas-color-overlay)
--oas-tour-popup-bgvar(--oas-color-bg)

遮罩高亮目标,role="dialog" + aria-modal="true"(mask="false" 非模态时降级为 aria-modal="false");支持「上一步 / 下一步 / 跳过」、键盘 ←/→ 与 Esc。

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