内容提要
Web Awesome 的 `<wa-random-content>` 组件无需脚本即可随机显示子元素中的一项。文章通过十个示例展示其用法,包括随机问候语、空状态提示、成功确认、加载文案、轮播图片、客户 logo、相关文章、网格占位图、名称生成器和随机角色。核心原则是仅随机化不影响含义的内容,数字和按钮等须保持不变;自动轮播需提供暂停按钮并兼顾无障碍。
延伸解读
随机化的边界:只改表达,不改含义
文章反复强调一条原则:只随机化那些改变后不影响含义的内容。问候语、空状态提示、成功确认、加载文案可以每次不同,但任务数量、按钮标签、状态行等必须保持不变。例如问候语下方的“3 unexplained cases”不能随机,否则用户会困惑。这提醒开发者,随机内容应限于装饰性或情感性文本,避免干扰功能信息的传达。
自动轮播的无障碍与性能代价
使用autoplay自动轮播时,文章建议添加可见的暂停按钮,因为组件虽在悬停和聚焦时暂停,但logo本身不可聚焦,键盘用户无法操作。同时,轮播内容应对屏幕阅读器隐藏,并以纯文本列出全部客户名称。此外,mode="sequence"可避免首屏闪烁,loading="lazy"可延迟加载不可见图片,但会带来短暂空白,需权衡下载量与显示效果。
随机推荐与网格占位的适用场景
对于相关文章推荐,文章坦言如果CMS已有基于标签或热度的推荐,应优先使用,因为那比随机更智能;但随机仍优于一年未更新的手动推荐列表。在网格占位图中,每个瓦片独立随机可能导致相邻项重复,小池子下像bug,因此需要足够多的选项来降低重复感。这些案例说明随机内容适合补充而非替代现有逻辑。
交互元素与随机化的冲突风险
文章警告,如果随机内容内部包含按钮或链接,轮换可能导致焦点意外移动。因此,应将触发随机的控件放在轮换区域之外,并且当池中有任何交互元素时,完全避免自动轮换。名称生成器的例子展示了正确做法:随机化发生在稳定的按钮内部,名称变化而按钮不变,这样既有趣又不会破坏操作预期。
Q&A
wa-random-content 组件是什么?它有什么作用?
wa-random-content 是 Web Awesome 的一个小组件,它无需脚本就能随机显示其子元素中的一项。你只需给它一些子元素,它就会随机展示其中一个。
使用 wa-random-content 时,哪些内容可以随机化,哪些必须保持不变?
只能随机化那些改变后不影响含义的内容,比如问候语、空状态提示、成功确认、加载文案、装饰图片、客户 logo、相关文章、网格占位图、名称生成器和随机角色。而数字、按钮标签、任务计数等必须保持不变,因为改变它们会改变含义或导致功能问题。
在加载消息中使用 wa-random-content 时,如何确保无障碍访问?
需要将玩笑内容设置为 aria-hidden,并提供一个单独的 status 元素来播报“正在生成报告,请稍候”之类的信息。这样屏幕阅读器只会听到一次状态,而不会每隔几秒就读出一个新笑话。
使用 wa-random-content 的 autoplay 功能时需要注意什么?
如果使用 autoplay,必须提供一个可见的暂停按钮,因为组件虽然会在悬停和聚焦时暂停,但 logo 本身不可聚焦,键盘用户无法操作。同时,应将轮换的 logo 对屏幕阅读器隐藏,并以纯文本形式列出完整的客户列表,以便辅助技术一次性获取所有名称。
在网格中使用多个 wa-random-content 实例时,可能会遇到什么问题?如何缓解?
每个网格项独立随机选择,可能导致相邻项选中相同选项。如果选项池很大,这看起来像巧合;如果池很小,则像 bug。缓解方法是提供足够多的选项,以降低重复的概率。
如何利用 wa-random-content 生成随机角色?
可以创建多个 wa-random-content 实例,分别随机选择职业、携带物品和怪癖,每个实例有六个选项,这样就能从十八行文案中生成 216 个角色。在每个实例上使用 mode="unique" 可以避免连续两次出现相同的结果。