content/(plugins)/(functionality)/navigation-feedback.cn.mdx
data-nav-* 属性,便于自定义渲染层样式导航反馈是一个小型核心插件,用来表达“你跳到了这里”。
它适合:
NavigationFeedbackPlugin 属于 Plate 核心插件的一部分。
如果你使用 createPlateEditor 创建编辑器,它会自动启用。你不需要
为了默认行为单独把它加入 plugins 数组。
如果你想调整高亮时长,可以通过根插件配置这个核心插件:
import { createPlateEditor, NavigationFeedbackPlugin } from 'platejs/react';
const editor = createPlateEditor({
rootPlugin: (plugin) =>
plugin.configurePlugin(NavigationFeedbackPlugin, {
options: {
duration: 1200,
},
}),
});
options.duration:默认高亮时长,单位为毫秒
800如果跳转本身已经完成,只需要落点确认,用
editor.tf.navigation.flashTarget(...):
editor.tf.navigation.flashTarget({
target: {
path: [12],
type: 'node',
},
});
也可以为单次调用覆盖时长或高亮变体:
editor.tf.navigation.flashTarget({
duration: 1500,
target: {
path: [12],
type: 'node',
},
variant: 'navigated',
});
如果同一个动作应该同时:
那就使用 editor.tf.navigation.navigate(...):
editor.tf.navigation.navigate({
select: {
anchor: { offset: 0, path: [12, 0] },
focus: { offset: 0, path: [12, 0] },
},
target: {
path: [12],
type: 'node',
},
});
也可以细调:
editor.tf.navigation.navigate({
flash: {
duration: 1200,
variant: 'navigated',
},
focus: true,
scroll: true,
scrollTarget: { offset: 0, path: [12, 0] },
select: { offset: 0, path: [12, 0] },
target: {
path: [12],
type: 'node',
},
});
flash:当前调用的高亮配置。设为 false 可跳过视觉反馈focus:导航后聚焦编辑器
truescroll:将目标滚动到可视区域
truescrollTarget:显式指定滚动点select:高亮前应用的点或范围插件会在激活节点上注入这些临时属性:
data-nav-highlightdata-nav-cycledata-nav-pulsedata-nav-target还会注入这个 CSS 变量:
--plate-nav-feedback-durationPlate 文档站在自己的 globals.css 中为这些属性提供了默认样式。你也可以在任意编辑器外壳中自定义:
.slate-editor [data-nav-highlight] {
border-radius: 0.375rem;
}
.slate-editor [data-nav-highlight][data-nav-cycle='0'] {
animation: plate-nav-highlight-a var(--plate-nav-feedback-duration, 900ms)
ease-out;
}
.slate-editor [data-nav-highlight][data-nav-cycle='1'] {
animation: plate-nav-highlight-b var(--plate-nav-feedback-duration, 900ms)
ease-out;
}
NavigationFeedbackPlugin用于成功导航后短暂“落点高亮”的核心插件。
<API name="NavigationFeedbackPlugin"> <APIOptions> <APIItem name="duration" type="number" optional> 默认高亮时长,单位为毫秒。 - **默认值:** `800` </APIItem> </APIOptions> </API>api.navigation.activeTarget获取当前高亮目标。
<API name="activeTarget"> <APIReturns> <APIItem name="return" type="NavigationFeedbackActiveTarget | null"> 当前导航目标元数据;如果没有激活高亮则返回 `null`。 </APIItem> </APIReturns> </API>api.navigation.clear立即清除当前导航高亮目标。
<API name="clear" />api.navigation.isTarget判断某个路径是否就是当前高亮目标。
<API name="isTarget"> <APIParameters> <APIItem name="path" type="Path"> 要比较的路径。 </APIItem> </APIParameters> </API>tf.navigation.clear立即清除当前高亮目标。
<API name="clear" />tf.navigation.flashTarget只高亮目标节点,不修改选择、焦点或滚动。
<API name="flashTarget"> <APIParameters> <APIItem name="target" type="{ path: Path; type: 'node' }"> 需要高亮的节点目标。 </APIItem> <APIItem name="duration" type="number" optional> 覆盖本次调用的默认时长。 </APIItem> <APIItem name="variant" type="string" optional> 写入 `data-nav-highlight` 的高亮变体。 - **默认值:** `navigated` </APIItem> </APIParameters> </API>tf.navigation.navigate在一次调用中完成选择、聚焦、滚动与高亮。
<API name="navigate"> <APIParameters> <APIItem name="target" type="{ path: Path; type: 'node' }"> 需要导航到的节点目标。 </APIItem> <APIItem name="select" type="Point | Range" optional> 在滚动和高亮前应用的点或范围。 </APIItem> <APIItem name="focus" type="boolean" optional> 导航后聚焦编辑器。 - **默认值:** `true` </APIItem> <APIItem name="scroll" type="boolean" optional> 将目标滚动到可视区域。 - **默认值:** `true` </APIItem> <APIItem name="scrollTarget" type="Point" optional> 显式指定滚动点。 </APIItem> <APIItem name="flash" type="false | { duration?: number; variant?: string }" optional> 本次导航调用的高亮配置。 </APIItem> </APIParameters> </API>