Tooltip

TsgcHTMLComponent_Tooltip:为页面上的元素(例如工具栏按钮和表单字段)提供 Bootstrap 工具提示,由一组项目生成,每个项目指定一个目标和一段文本。工具提示在悬停和键盘焦点时打开,按 Esc 关闭,并适用于 htmx 换入的内容。适用于 Delphi、C++ Builder 和 .NET。

TsgcHTMLComponent_Tooltip

为每个工具提示添加一个项目,并在与目标相同的页面中提供 HTML。组件不渲染任何可见的标记:一个 JSON 块列出这些工具提示,页面加载时,一小段脚本会在每个目标元素上创建一个 Bootstrap 5 工具提示。

组件类

TsgcHTMLComponent_Tooltip,每个工具提示在 项目 中对应一个 TsgcHTMLTooltipItem

渲染为

一个 JSON 块和一小段脚本,建立在 sgcHTML 引擎从内嵌资源提供的 Bootstrap 包之上,因此无需 CDN

语言

Delphi, C++ Builder, .NET

每个工具提示一个项目,默认值设在组件上

组件上的 Placement、Trigger、Delay、Variant 和 MaxWidth 是每个项目的默认值,项目可以用自己的值覆盖其中任何一个。Add 一次调用即可设置目标和文本。

uses
  sgcHTML_Component_Tooltip;

var
  oTip: TsgcHTMLComponent_Tooltip;
  oItem: TsgcHTMLTooltipItem;
begin
  oTip := TsgcHTMLComponent_Tooltip.Create(nil);
  try
    oTip.Placement := ttpBottom;
    oTip.Delay := 100;
    oTip.Add('#btnSave', 'Save the record');
    oTip.Add('#btnExport', 'Export the grid to Excel');

    oItem := oTip.Items.Add;
    oItem.TargetComponent := edtEmail;   // 其 EditID 已设置
    oItem.Title := 'Email';
    oItem.Text := 'The invoice is sent to this address.';
    oItem.Placement := ttpRight;

    Result := oTip.HTML;   // 在目标所在的页面中提供它
  finally
    oTip.Free;
  end;
end;
@* 父元素的属性是每个项目的默认值 *@
<sgc-tooltip placement="bottom" delay="100" variant="dark" max-width="18rem">
  <sgc-tooltip-item target="#btnSave" text="Save the record" />
  <sgc-tooltip-item target="#email" title="Email" text="The invoice is sent to this address."
                    placement="right" trigger="focus" variant="light" />
  <sgc-tooltip-item target=".btn-danger" text="&lt;b&gt;Cannot be undone&lt;/b&gt;" html="true"
                    trigger="click" variant="danger" />
</sgc-tooltip>
using esegece.sgcWebSockets;

var tip = new TsgcHTMLComponent_Tooltip();
tip.Placement = TsgcHTMLTooltipPlacement.ttpBottom;
tip.Delay = 100;
tip.Add("#btnSave", "Save the record");
tip.Add("#btnExport", "Export the grid to Excel");

var item = tip.Items.Add();
item.TargetComponent = edtEmail;   // 其 EditID 已设置
item.Title = "Email";
item.Text = "The invoice is sent to this address.";
item.Placement = TsgcHTMLTooltipPlacement.ttpRight;

string html = tip.HTML;

您的用户能得到什么

让每位用户都能看到的简短提示,无论使用鼠标、键盘还是屏幕阅读器。

悬停和键盘焦点

使用默认触发方式时,目标获得焦点后,键盘用户就会看到工具提示。无法获得焦点的目标,例如 span 或图标,会获得 tabindex="0",在工具提示被释放时再次移除。

可关闭、可悬停、持续显示

工具提示遵循 WCAG 2.2 成功标准 1.4.13。Esc 会关闭所有已打开的工具提示,而不移动指针或焦点;指针可以移到工具提示上而不会使其关闭;工具提示会一直保持打开,直到指针或焦点离开。它绝不会因计时器而关闭。

屏幕阅读器可读取

aria-describedby 把工具提示与获得焦点的元素关联起来,因此屏幕阅读器会在读出名称之后读出文本。目标原有的 aria-describedby 会保留在旁边,并在工具提示关闭时恢复。

合适的位置

自动、上、下、左或右。只要视口中放得下,工具提示就会保持所请求的一侧,只有该侧没有空间时才会移到另一侧。

颜色变体

Variant 选择 Bootstrap 的外观:浅色、深色或主题色(primary、secondary、success、danger、warning 或 info)。MaxWidth 接受 CSS 长度,留空则保持 200px。

标题和富文本

纯文本会进行 HTML 编码,换行变成 <br>。Title 添加一行粗体的首行。当 HTML 为 True 时,文本是标记,会经过 sgcHTMLSanitizeHTML,保留格式和图像,并移除脚本、事件处理程序特性和不安全的 URL。

关键属性、方法与事件

您最常用到的成员。

Items 与 Add

Add(aTarget, aText) 一次调用即可添加一个工具提示,Items.Add 返回一个项目,用来设置其余内容。每个项目都有 Target、TargetComponent、Text、Title 和 HTML,以及带有继承值的组件的五个选项:ttpInherit、tttInherit、Delay 为 -1、ttvInherit 和空的 MaxWidth。

Target

一个 CSS 选择器,每个匹配的元素都会获得工具提示,因此一个项目可以描述某个类的所有按钮,例如 .toolbar .btn-danger 或 [name="email"]。没有目标的项目会被忽略。

TargetComponent

链接同一页面中的一个组件,工具提示会加在其 id 等于该组件 id 属性的元素上:Edit 用 EditID,CheckBox 用 CheckBoxID,Popover 用 PopoverID,其他用其 ElementID。只有设置了该 id 时才会解析,否则项目使用 Target。

Trigger 与 Delay

Trigger 让工具提示在悬停和焦点时(默认)、点击时、焦点时或手动打开。Delay 是工具提示打开前的毫秒数。对使用点击触发的按钮目标,按 Enter 和空格键可打开或关闭。

htmx 换入的内容

每次 htmx:afterSwap 和 htmx:load 之后,脚本都会再次扫描页面。与某个项目匹配的新元素会获得工具提示,其元素或 JSON 块已离开页面的工具提示会被释放。无论页面上有多少个组件,脚本每页只运行一次。

输出

HTML 返回 JSON 块以及随后的工具提示脚本,如果没有任何项目同时具有目标和文本,则返回空字符串。请与 Bootstrap 包一起提供,例如放在 TsgcHTMLTemplate_Bootstrap 的 BodyContent 中。它在页面中的位置无关紧要,脚本会等待该包。

是提示,而不是对话框

请让工具提示保持简短:它们无法容纳用户必须操作的控件。对于交互式内容,请使用 Popover 或 Modal。

undefined

在 Razor 视图中,<sgc-tooltip> Tag Helper 渲染该组件,每个项目对应一个 <sgc-tooltip-item /> 子元素。父元素的特性是每个项目的默认值。工具提示不需要服务器事件,因此每次渲染都会创建组件。TargetComponent 没有对应的特性:请使用带有元素 id 的 target。

演示

Demos\60.HTML\01.RunTime\29.Tour 是端口 8131 上的 sgc Cloud Console,这是一个 SaaS 仪表板,在工具栏按钮、统计卡片和表单字段上带有工具提示,旁边还有首次使用的产品导览。设计时、Lazarus 和 .NET 版本与之对应。

继续探索

在线试用查看 导览与提示 演示,它在 eSeGeCe 演示服务器上实时运行。
在线帮助此组件的完整 API 参考和使用指南。
Tour 组件带聚光灯的引导式产品导览,在同一个演示中与工具提示一起展示。
Popover 组件附着在触发元素上的气泡,用于承载不止是一句提示的内容。
所有 sgcHTML 组件浏览 80 多个组件的完整功能矩阵。
下载免费试用版30 天试用版包含 60.HTML 演示项目。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

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