bot.stateMorphBotState读取或设置当前状态。赋值会立即开始状态切换。
FRAMEWORK-FREE WEB COMPONENT
用一个 <morph-bot> 标签展示状态、加载过程和任务反馈。组件基于原生 Web Component,可在普通 HTML、React、Vue 或任何能加载 ES Module 的项目中使用。
QUICK START
morph-bot/ 文件夹放在 HTML 文件旁。type="module" 脚本注册自定义元素。state、shape 和 size。<script type="module" src="./morph-bot/morph-bot.js"></script>
<morph-bot
state="idle"
shape="blob"
size="72"
label="等待任务"
></morph-bot>
INSTALLATION
组件入口会从同目录加载动画引擎和几何数据,因此不要只复制 morph-bot.js。
路径规则:如果页面和 morph-bot/ 是同级,使用 ./morph-bot/morph-bot.js。框架项目应把整个目录放进公开静态资源目录,再使用对应的公开 URL。
ELEMENT
| 属性 | 类型 | 默认值 | 作用 |
|---|---|---|---|
state | string | idle | 选择 39 个状态之一。 |
shape | string | blob | 选择 18 个身体轮廓之一。 |
size | number | 96 | 组件边长,范围 12–1024 CSS px。 |
color | CSS color | #0b0b0b | 身体与 Morph 主色。 |
eye-color | CSS color | #ffffff | 眼睛颜色。 |
speed | number | 1 | 播放倍率,范围 0.1–4。 |
follow-pointer | boolean | 关闭 | 让视线跟随页面指针。 |
flip | boolean | 关闭 | 水平翻转组件。 |
paused | boolean | 关闭 | 暂停内部仿真时钟。 |
decorative | boolean | 关闭 | 作为纯装饰并从无障碍树隐藏。 |
label | string | 自动 | 非装饰组件的无障碍名称。 |
<morph-bot
state="thinking"
shape="hex"
size="64"
color="#111210"
eye-color="#ffffff"
speed="1"
follow-pointer
label="正在思考"
></morph-bot>
JAVASCRIPT
bot.stateMorphBotState读取或设置当前状态。赋值会立即开始状态切换。
bot.shapeMorphBotShape读取或设置当前轮廓。
bot.sizenumber读取或设置组件尺寸。
bot.speednumber读取或设置播放倍率。
bot.pausedboolean读取或设置暂停状态。
METHODS
setState(state, options?)切换到目标状态并返回当前元素。传入 { replay: true } 可重新播放相同状态。
setShape(shape)切换轮廓并返回当前元素。
replay()从头重播当前状态。
pause() / play()暂停或恢复动画,均返回当前元素。
step()前进一帧并保持暂停,适合逐帧检查。
playMorph(effect, options?)播放一次 Morph。hold 默认 2500ms;restore 可传状态名、"default" 或 null。返回 Promise。
playSequence(steps, options?)依次执行状态停留和单次 Morph。每步支持 state、hold、morph、morphHold;{ loop: true } 可循环。
stopSequence()立即取消当前时间线并退出正在播放的单次 Morph,返回当前元素。
restoreStateMorph()结束单次 Morph 预览,恢复当前状态自带的 Morph 逻辑。
configure(project)加载编辑器导出的 v5 preset,并返回当前元素。
snapshot()返回当前引擎快照;组件尚未连接时返回 null。
每一步都按固定顺序执行:进入 state → 停留 hold 毫秒 → 播放 morph → 保持 morphHold 毫秒 → 进入下一步。省略 morph 就会在停留后直接进入下一状态。
const bot = document.querySelector("#status-bot");
const sequence = [
{ state: "idle", hold: 1000, morph: "gather", morphHold: 700 },
{ state: "thinking", hold: 2400, morph: "send", morphHold: 700 },
{ state: "celebrate", hold: 1600 },
];
// 播放一次;改为 loop: true 可持续循环
bot.playSequence(sequence, { loop: false });
// 随时停止
bot.stopSequence();
EVENTS
| 事件 | event.detail | 触发时机 |
|---|---|---|
ready | — | Shadow DOM 和引擎初始化完成。 |
statechange | { state } | state 属性改变。 |
shapechange | { shape } | shape 属性改变。 |
morphstart | { effect, hold } | 单次 Morph 开始。 |
morphend | { effect } | 单次 Morph 完成退出。 |
sequencestart | { steps, loop } | 时间线开始。 |
sequencestep | { index, cycle, state, hold, morph, morphHold } | 进入一个状态步骤。 |
sequenceend | { cycles } | 非循环时间线完整结束。 |
bot.addEventListener("statechange", (event) => {
console.log("当前状态:", event.detail.state);
});
RUNTIME
snapshot() 返回只读的即时信息,适合调试面板和测试,不用于反向修改组件。
stateexpressionIndexeyeOpeneyeOpenTargetmorphEffectmorphAmountmorphPhaseelapsedplaybackRatepaused
STATE REFERENCE
状态控制眼形池、眨眼节奏、姿态、运动和默认 Morph。点击右侧 Live API 的“应用状态”可立即检查任意状态。
SHAPE REFERENCE
形状只改变身体轮廓和眼位适配,不改变状态语义。
MORPH REFERENCE
通过 playMorph() 单独触发,或放进 playSequence() 的步骤中。它们按 RESET → ENTER → HOLD → EXIT → DONE 完整播放。
await bot.playMorph("send", {
hold: 1200,
restore: "idle",
});
PRESET
configure() 接受编辑器导出的 v5 JSON。标签上的 HTML 属性优先,因此可以用一个 preset 保存完整设计,再在每个使用位置覆盖状态、形状、尺寸或颜色。
const preset = await fetch("./my-bot.json")
.then((response) => response.json());
document.querySelector("morph-bot")
.configure(preset);
ACCESSIBILITY
label,例如“正在生成报告”。decorative,避免重复朗读。loading、progress 和 spawning 默认使用 role="status"。prefers-reduced-motion 设置。progress 不是 0–100% 进度。LIFECYCLE
IntersectionObserver 自动暂停,重新可见时恢复。TYPESCRIPT
下载包包含 morph-bot.d.ts,并导出组件类、三个只读名称列表和状态到 Morph 的映射。
MorphBotElementMORPH_BOT_STATESMORPH_BOT_SHAPESMORPH_BOT_EFFECTSMORPH_BY_STATE
import MorphBotElement, {
MORPH_BOT_STATES,
MORPH_BOT_SHAPES,
MORPH_BOT_EFFECTS,
} from "./morph-bot/morph-bot.js";