开发预览 更新于 2026-05-10

Tour 新手引导

分步高亮关键 UI 元素 + 解释气泡,新功能上线时引导用户。

基础用法

steps 每一项 { target, title, description, placement }target 是 CSS 选择器,对应页面里需要被高亮的元素;placement 控制气泡相对目标的方位。

背景 视口
src/App.vue
<script setup lang="ts">
import { ref } from 'vue';
import { CfTour, CfButton, type TourStep } from '@chufix-design/vue';

const open = ref(false);

const steps: TourStep[] = [
  {
    target: '#tour-step-1',
    title: '欢迎使用',
    description: '这是引导的第一步,会高亮当前操作目标。',
    placement: 'bottom',
  },
  {
    target: '#tour-step-2',
    title: '关键功能',
    description: '点击这里可以创建一份新的资源。',
    placement: 'bottom',
  },
  {
    target: '#tour-step-3',
    title: '设置入口',
    description: '在这里配置全局偏好,随时可改。',
    placement: 'bottom',
  },
];
</script>
<template>
  <div style="display: flex; flex-direction: column; gap: 16px; align-items: flex-start;">
    <div style="display: flex; gap: 8px;">
      <CfButton id="tour-step-1" variant="secondary" size="sm">资源列表</CfButton>
      <CfButton id="tour-step-2" variant="primary" size="sm">+ 新建</CfButton>
      <CfButton id="tour-step-3" variant="ghost" size="sm">⚙ 设置</CfButton>
    </div>
    <CfButton size="sm" @click="open = true">开始引导</CfButton>
    <CfTour v-model="open" :steps="steps" />
  </div>
</template>
<script setup>
import { ref } from 'vue';
import { CfTour, CfButton } from '@chufix-design/vue';

const open = ref(false);

const steps= [
  {
    target: '#tour-step-1',
    title: '欢迎使用',
    description: '这是引导的第一步,会高亮当前操作目标。',
    placement: 'bottom',
  },
  {
    target: '#tour-step-2',
    title: '关键功能',
    description: '点击这里可以创建一份新的资源。',
    placement: 'bottom',
  },
  {
    target: '#tour-step-3',
    title: '设置入口',
    description: '在这里配置全局偏好,随时可改。',
    placement: 'bottom',
  },
];
</script>
<template>
  <div style="display: flex; flex-direction: column; gap: 16px; align-items: flex-start;">
    <div style="display: flex; gap: 8px;">
      <CfButton id="tour-step-1" variant="secondary" size="sm">资源列表</CfButton>
      <CfButton id="tour-step-2" variant="primary" size="sm">+ 新建</CfButton>
      <CfButton id="tour-step-3" variant="ghost" size="sm">⚙ 设置</CfButton>
    </div>
    <CfButton size="sm" @click="open = true">开始引导</CfButton>
    <CfTour v-model="open" :steps="steps" />
  </div>
</template>
import { useState } from 'react';
import { CfButton, CfTour } from '@chufix-design/react';

export default function Demo() {
  const [open, setOpen] = useState(false);

  const steps: TourStep[] = [
    {
      target: '#tour-step-1',
      title: '欢迎使用',
      description: '这是引导的第一步,会高亮当前操作目标。',
      placement: 'bottom',
    },
    {
      target: '#tour-step-2',
      title: '关键功能',
      description: '点击这里可以创建一份新的资源。',
      placement: 'bottom',
    },
    {
      target: '#tour-step-3',
      title: '设置入口',
      description: '在这里配置全局偏好,随时可改。',
      placement: 'bottom',
    },
  ];
  return (
    <>
      <div style={{ display: "flex", flexDirection: "column", gap: 16, alignItems: "flex-start" }}>
          <div style={{ display: "flex", gap: 8 }}>
            <CfButton id="tour-step-1" variant="secondary" size="sm">资源列表</CfButton>
            <CfButton id="tour-step-2" variant="primary" size="sm">+ 新建</CfButton>
            <CfButton id="tour-step-3" variant="ghost" size="sm">⚙ 设置</CfButton>
          </div>
          <CfButton size="sm" onClick={() => setOpen(true)}>开始引导</CfButton>
          <CfTour value={open} onChange={setOpen} steps={steps} />
        </div>
    </>
  );
}
import { useState } from 'react';
import { CfButton, CfTour } from '@chufix-design/react';

export default function Demo() {
  const [open, setOpen] = useState(false);

  const steps= [
    {
      target: '#tour-step-1',
      title: '欢迎使用',
      description: '这是引导的第一步,会高亮当前操作目标。',
      placement: 'bottom',
    },
    {
      target: '#tour-step-2',
      title: '关键功能',
      description: '点击这里可以创建一份新的资源。',
      placement: 'bottom',
    },
    {
      target: '#tour-step-3',
      title: '设置入口',
      description: '在这里配置全局偏好,随时可改。',
      placement: 'bottom',
    },
  ];
  return (
    <>
      <div style={{ display: "flex", flexDirection: "column", gap: 16, alignItems: "flex-start" }}>
          <div style={{ display: "flex", gap: 8 }}>
            <CfButton id="tour-step-1" variant="secondary" size="sm">资源列表</CfButton>
            <CfButton id="tour-step-2" variant="primary" size="sm">+ 新建</CfButton>
            <CfButton id="tour-step-3" variant="ghost" size="sm">⚙ 设置</CfButton>
          </div>
          <CfButton size="sm" onClick={() => setOpen(true)}>开始引导</CfButton>
          <CfTour value={open} onChange={setOpen} steps={steps} />
        </div>
    </>
  );
}

API

属性类型默认值说明
stepsTourStep[]引导步骤列表
open / modelValueboolean受控显示状态
defaultOpen / defaultValuebooleanfalse非受控初始状态
currentnumber受控当前步索引
defaultCurrentnumber0非受控初始步

Events

Vue 事件React 回调载荷类型说明
update:modelValueonOpenChangeboolean显示状态变化时触发
update:currentonCurrentChangenumber当前步索引变化时触发
finishonFinish用户点击「完成」走完最后一步时触发
closeonClose用户主动关闭(点击 × 或外部)时触发

TourStep

字段类型说明
targetstringCSS 选择器,定位高亮目标
titlestring气泡标题
descriptionstring气泡描述(可选)
placement'top' | 'bottom' | 'left' | 'right'气泡相对目标的方位,默认 'bottom'

反馈与讨论

Tour 新手引导 的讨论

0
0 / 600
正在加载评论...