Tour

TsgcHTMLComponent_Tour:用于新用户引导的产品导览。它用聚光灯和卡片逐步突出页面上的元素,可在首次访问时自动启动,也可通过按钮或由服务器启动,并通过服务器事件报告每个用户的进度。适用于 Delphi、C++ Builder 和 .NET。

TsgcHTMLComponent_Tour

添加 步骤,让每一步指向一个元素,然后设置 AutoStart 或添加一个开始按钮。OnStepChange、OnSkip 和 OnComplete 会告诉服务器每个用户进行到了哪里。

组件类

TsgcHTMLComponent_Tour,每一步在 步骤 中对应一个 TsgcHTMLTourStep

渲染为

一个以 JSON 保存配置的隐藏元素和导览脚本,样式内嵌,没有外部文件,也不需要 CDN

语言

Delphi, C++ Builder, .NET

步骤、启动方式,以及记录用户引导进度的事件

使用 AutoStart 时,浏览器第一次打开页面时导览会自动启动,开始按钮则可随时重新播放。分配了 HTMXEngine 后,浏览器会提交带有处理程序的事件。

uses
  sgcHTML_Session, sgcHTML_Component_Tour;

// 只创建一次:页面渲染之后它仍响应服务器事件
oTour := TsgcHTMLComponent_Tour.Create(Self);
oTour.Name := 'onboarding';
oTour.AutoStart := True;
oTour.HTMXEngine := HTMXEngine1;
oTour.OnComplete := TourComplete;
oTour.OnSkip := TourSkip;
with oTour.Steps.Add do
begin
  Title := 'Welcome';   // 没有目标:居中的卡片
  Content := '<p>Take a minute to see what is where.</p>';
end;
with oTour.Steps.Add do
begin
  Target := '#sidebar';
  Title := 'Navigation';
  Content := '<p>Every module of the app is here.</p>';
  Placement := trpRight;
end;
sHtml := oTour.HTML + oTour.GetStartButtonHTML('Restart tour');

procedure TForm1.TourComplete(Sender: TObject; var aResponse: string);
var
  oSession: TsgcHTMLSession;
begin
  oSession := sgcHTMLRequestSession;   // 本次请求的会话
  if oSession <> nil then
    SaveOnboardingDone(oSession.UserID);   // 您自己的代码
end;

procedure TForm1.TourSkip(Sender: TObject; aStep: Integer; var aResponse: string);
var
  oSession: TsgcHTMLSession;
begin
  oSession := sgcHTMLRequestSession;
  if oSession <> nil then
    SaveOnboardingSkipped(oSession.UserID, aStep);
end;
@* 每个步骤的内容就是其卡片的 HTML *@
<sgc-tour name="onboarding" auto-start="true" on-complete="Model.TourDone" on-skip="Model.TourSkipped">
  <sgc-tour-step title="Welcome"><p>Take a minute to see what is where.</p></sgc-tour-step>
  <sgc-tour-step target="#sidebar" title="Navigation" placement="right">
    <p>Every module of the app is here.</p>
  </sgc-tour-step>
  <sgc-tour-step target="#btnSettings" title="Settings" image="/img/settings.png">
    <p>Change the theme and your profile here.</p>
  </sgc-tour-step>
</sgc-tour>
using esegece.sgcWebSockets;

var tour = new TsgcHTMLComponent_Tour { Name = "onboarding" };
tour.AutoStart = true;
tour.HTMXEngine = htmxEngine;
tour.OnComplete += TourDone;
tour.OnSkip += TourSkipped;
var step = tour.Steps.Add();
step.Title = "Welcome";
step.Content = "<p>Take a minute to see what is where.</p>";
step = tour.Steps.Add();
step.Target = "#sidebar";
step.Title = "Navigation";
step.Content = "<p>Every module of the app is here.</p>";
step.Placement = TsgcHTMLTourPlacement.trpRight;
string html = tour.HTML + tour.GetStartButtonHTML("Restart tour");

public void TourDone(object sender, ref string response)
{
    SaveOnboardingDone(User.Identity?.Name);
}

public void TourSkipped(object sender, int step, ref string response)
{
    SaveOnboardingSkipped(User.Identity?.Name, step);
}

您的用户能得到什么

向新用户展示什么在哪里的首次体验,以及在您的服务器上记录每位用户进行到了哪里。

聚光灯和卡片

每一步都用暗化背景中的聚光灯镂空来突出一个元素,并在旁边显示一张卡片,其中有标题、HTML 内容、可选的图像、带进度点的步骤计数,以及“上一步”“下一步”“跳过导览”和“完成”按钮。没有目标的步骤会把卡片居中显示在页面上。

四种启动方式

首次访问时自动启动(AutoStart)、通过按钮(GetStartButtonHTML,或任意元素上的 data-sgc-tour-start)、通过您自己的脚本(GetStartScript),或由服务器为某一位用户启动(GetStartHTML)。

在浏览器中记住

“完成”或“跳过导览”会以 StorageKey 为键保存在浏览器的 localStorage 中,默认是 sgc-tour:<Name>,AutoStart 在该浏览器中不会再次启动导览。更改 StorageKey 可以向所有人展示修订后的导览。

适合用户的步骤

目标缺失或被隐藏的步骤,例如用户没有的角色的面板,在两个方向上都会被跳过,计数只统计可以显示的步骤。卡片始终位于视口之内,在窄屏幕上会回退到下方、上方或居中。

键盘和屏幕阅读器

卡片是以其标题命名的对话框。步骤显示时,焦点移到“下一步”,导览结束时返回原处,在模态卡片中 Tab 会在其按钮之间循环。方向键在步骤之间移动,Esc 退出,polite 实时区域会播报“第 n 步,共 m 步:标题”。

语言和主题

按钮和步骤文本提供库的 17 种语言。从右到左的页面会镜像位置和方向键,卡片会复制页面的 data-bs-theme,因此会跟随深色主题。样式在导览启动时添加,结束时移除。

关键属性、方法与事件

您最常用到的成员。

步骤

每一步都有 Target(CSS 选择器,取第一个匹配项)或 TargetComponent、纯文本的 Title、经 sgcHTMLSanitizeHTML 清理的 HTML Content、经过 sgcHTMLSanitizeURL 的 Image URL、Placement,以及它自己的 ShowBackdrop 和 ScrollIntoView。

外观

ShowBackdrop、ShowProgress 和 ShowSkip 分别开关背景、带圆点的计数和“跳过导览”按钮。Padding(默认为 6)是目标周围的像素间距,AllowKeyboard 启用 Esc 和方向键,CloseOnBackdropClick 让点击背景时退出导览。

服务器事件

OnStepChange 在每次显示一个步骤时触发,OnSkip 在用户于结束前离开时触发并带有步骤索引,OnComplete 在用户于最后一步按下“完成”时触发。浏览器只提交带有处理程序的事件,步骤 之外的步骤索引会被拒绝。

事件的用户

处理程序在请求的线程上运行,sgcHTMLRequestSession 在该线程上提供会话和用户。如果返回的 HTML 元素标有 hx-swap-oob="true",您在 aResponse 中返回的 HTML 就会被 htmx 换入。

没有引擎时

分配 HTMXEngine,或设置 ActionURL 并从您自己的路由调用 DispatchComponentEvent('tour', Params, Response)。两者都没有时,导览在浏览器中运行,不提交任何内容。页面上有 htmx 时通过 htmx.ajax 提交,否则通过 XMLHttpRequest 并带上页面的 CSRF meta 标签提交。

由服务器启动

GetStartHTML 返回一个片段,在接收它的浏览器中启动导览,可作为 htmx 响应,也可推送到某个连接。开始按钮、GetStartScript 和 GetStartHTML 会忽略浏览器中保存的条目。

JavaScript API

window.sgcHTMLTour 提供 start(id[, step])、next、back、end、reset 和 active。每个函数都接受导览的 id,即 GetElementIdentifier 的值。reset 会移除保存的条目,因此 AutoStart 会再次运行导览。

undefined

在 Razor 视图中,<sgc-tour name="..."> Tag Helper 渲染导览,每一步对应一个 <sgc-tour-step> 子元素,其内容就是卡片的 HTML。首次渲染会为每个引擎和名称创建一个组件,并注册到 AddSgcHtml 的引擎,因此在页面渲染之后它仍会响应其服务器事件。

演示

Demos\60.HTML\01.RunTime\29.Tour 是端口 8131 上的 sgc Cloud Console:带聚光灯的八步首次使用导览、同一页面上的第二个“新增内容”导览、工具栏按钮、统计卡片和表单字段上的工具提示,以及服务器按用户记录的引导漏斗。设计时、Lazarus 和 .NET 版本与之对应。

继续探索

在线试用查看 导览与提示 演示,它在 eSeGeCe 演示服务器上实时运行。
在线帮助此组件的完整 API 参考和使用指南。
Tooltip 组件按钮和字段上的提示,在同一个演示中与导览一起展示。
所有 sgcHTML 组件浏览 80 多个组件的完整功能矩阵。
下载免费试用版30 天试用版包含 60.HTML 演示项目。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,开始在 Delphi、C++ Builder 和 .NET 中构建 Web 界面。