目标:把文档拆成可独立开发/测试的“小模块”,每个模块都有:
- 左侧(第一列):扁平化总菜单(未来会加入 Layer 等 UI 库)
- 中间(第二列):该模块/分组的「缩略图卡片」导航(像 anime.js 文档那样好玩)
- 右侧(第三列):每个卡片对应的“完整示例页”(中文说明 + Tabs + Live Demo + Prev/Next)
animal.js(xjs)例子与测试规划(分组清单)文档入口是 doc/index.html,它由 3 个区域组成:
左侧菜单(第一列)
selectCategory(listUrl, defaultContentUrl)第二列(中列)
doc/targets/list.html)window.parent.loadContent('xxx.html') 来切换第三列内容页window.setActiveByContentUrl(contentUrl),用于跟随第三列自动高亮第三列(右侧)
doc/targets/test_css_selector.html)window.parent.setMiddleActive('xxx.html'),让第二列自动高亮对应卡片每个“分组”建议放一个文件夹,结构如下:
doc/
<group_name>/
list.html # 第二列:卡片列表(缩略图导航)
overview.html # 第三列:可选的分组概览页(建议)
test_<topic>.html # 第三列:具体示例页(一个功能点一个页面)
命名建议:
targets/、tween_value_types/test_,例如 test_css_selector.htmloverview.html原则:一个总菜单,用“分区标题”做视觉分组,但不要折叠树(便于未来加入 Layer/其他 UI 库)。
左侧菜单当前在 doc/index.html 内直接维护。
<group>/list.html<group>/overview.html 或 test_xxx.html否则点击会白屏(找不到页面)。
第二列 list 页的核心要求:
data-content="group/test_xxx.html",用于与第三列 URL 做匹配window.setActiveByContentUrl(contentUrl),供父窗口调用进行高亮同步window.parent.loadContent('group/test_xxx.html')参考现成实现:
doc/targets/list.html第三列内容页建议统一采用“CSS Selector”同款结构:
内容页必须做两件事(保证三列联动):
同步第二列高亮
try { window.parent?.setMiddleActive?.('group/test_xxx.html'); } catch {}
Prev / Next 走父窗口统一逻辑
const CURRENT = 'group/test_xxx.html';
function goPrev() { window.parent?.docNavigatePrev?.(CURRENT); }
function goNext() { window.parent?.docNavigateNext?.(CURRENT); }
好处:不用每个页面手写上一个/下一个链接;组内/跨组顺序统一由父窗口维护。
Prev/Next 规则:
路由表位置:
doc/index.html 里的 DOC_PAGES 数组维护原则:
test_xxx.html,就把它加进 DOC_PAGESurl 使用相对 doc/ 的路径,例如 targets/test_css_selector.htmlgroup 用于 Nav 中间的“当前分组”显示animal.js(xjs)例子与测试规划(分组清单)说明:
targets/overview.html:概览targets/test_css_selector.html:CSS Selector(字符串)targets/test_dom_elements.html:DOM Element / NodeListtargets/test_js_objects.html:JS 对象作为目标(对象 tween)targets/test_array_targets.html:数组 targets(混合目标)animatable_properties/test_transforms.html:Transform(x/y/rotate/scale)animatable_properties/test_css_props.html:CSS 属性animatable_properties/test_css_vars.html:CSS 变量 --xxxanimatable_properties/test_js_props.html:JS 属性(非 style)⬜(建议新增)
animatable_properties/overview.html:本组概览 + “WAAPI vs JS fallback” 解释 + controls.engine 展示tween_value_types/test_numerical.html:数字tween_value_types/test_unit.html:单位(px/deg/%/rem…)tween_value_types/test_relative.html:相对值(如果支持)tween_value_types/test_colors.html:颜色(如果支持)⬜(建议新增)
tween_value_types/overview.html:本组概览 + “哪些值会走 JS 插值/哪些会离散切换” 说明
animal.js实际支持的参数(来自源码):duration / delay / easing / direction / fill / loop / endDelay / autoplay / springFrames / begin / update / complete。
tween_parameters/list.htmltween_parameters/overview.htmltween_parameters/test_duration_delay.htmltween_parameters/test_endDelay_fill.htmltween_parameters/test_direction_loop.htmltween_parameters/test_easing_named_and_bezier.htmltween_parameters/test_easing_spring.html(展示 spring 曲线 + springFrames)
animate()返回 Controls:play/pause/cancel/finish/seek,并且是 thenable(可await)。
controls/list.htmlcontrols/overview.htmlcontrols/test_play_pause_resume.htmlcontrols/test_seek_slider.html(进度条拖动)controls/test_thenable.html(await xjs(...).animate(...))controls/test_engine_info.html(展示 controls.engine.waapiKeys/jsKeys)timeline/list.htmltimeline/overview.htmltimeline/test_add_offsets.html(+=、-=、number offset)timeline/test_defaults.html(timeline defaults)svg/list.htmlsvg/overview.htmlsvg/test_draw_path.html(xjs('path').draw())svg/test_svg_attr_js_fallback.html(SVG attribute 动画:哪些走 JS)scroll/list.htmlscroll/overview.htmlscroll/test_inview_once.html(inViewAnimate once:true/false)scroll/test_scroll_linked_element.html(scroll(target))scroll/test_scroll_container.html(scroll container)
Selection.layer()/Selection.unlayer()+$.run()/$.layer()
examples/layer.html(已有示例,但后续会补充“更像产品”的玩法)layer/list.html(第二列:Layer 分组卡片导航)layer/overview.html(独立分组:弹窗 API + 图标动画概览)layer/test_icons_svg_animation.html(SVG icon:ring + mark 描边动画,体验接近 SweetAlert)layer/test_confirm_flow.html(确认流程:warning → success/info 串联)layer/test_selection_layer_dataset.html(Selection.layer + data-layer-*)layer/test_static_fire.html(Layer.run / Layer.$ builder)说明:Layer 的成功/失败等 icon 已切换为 内联 SVG,并使用
animal.js的draw()技术(strokeDashoffset)做描边动画,同时用 spring easing 做弹性进入。
doc/index.html)doc/index.html:DOC_PAGES + docGetPrevNext/docNavigatePrev/docNavigateNext)doc/module.html,读取 doc/module.md)animal.js 的缺失分组:Tween parameters / Controls / Timeline / SVG / Scroll / Layer(独立分组)