Files
aurora-admin/site/end-content/countdown.vue3.json

57 lines
3.4 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"slug": "countdown",
"end": "vue3",
"curated": true,
"summary": "Vue 3 倒计时:传毫秒 target,内部每秒刷新,不足一天不显示天数段。",
"usage": [
"target 是 defineProps 里唯一的 prop,收毫秒时间戳,默认当前时间加一小时(Countdown.vue3.vue:15);传秒级时间戳会算成很久以前,差值被截成 0 后四段全显示 00。",
"计时由组件自己维持:onMounted 里 setInterval 每秒刷新内部 ref now,onBeforeUnmount 里 clearInterval(第 18-19 行),外部不需要也不应该驱动刷新。",
"组件是 <script setup> 加单个 defineProps,只有一个 prop,没有 emit 也没有插槽,时分秒格式与冒号分隔符全写在模板里。",
"天数段由 v-if 判内部 computed d > 0 决定是否渲染(第 3 行),不足一天的倒计时不会渲染天这一格,总宽度会少一段。",
"剩余量经 Math.max(0, diff) 兜底(第 21 行);diff 是依赖 props.target 与内部 ref now 的 computed,target 已过期时显示全 0 而不是负数。"
],
"bestPractices": [
"改 target 不需要重建组件:diff 是 computed,同时依赖 props.target 与内部 now,换值立即反映到四段显示上。",
"默认值是 () => Date.now() + 3600000 这样的工厂函数(第 15 行),每个实例各拿到自己的一小时;写成静态表达式会在组件定义时只求值一次。",
"组件只管显示不做回调:倒计时归零没有任何事件,需要在 0 点执行动作请按 target 在外部另设定时。",
"刷新用当前时间戳重算而不是每秒自减(第 16-18、21 行),标签页被挂起再回来时显示依然准确。"
],
"a11y": [
"数字每秒变化但容器 .kole-countdown 没有 aria-live 之类的播报属性,读屏器不会主动念出变化。",
"天/时/分/秒的单位是相邻 span 的可见文本(.kole-countdown-label),读屏器按 DOM 顺序念数字加单位,与视觉顺序一致。",
"数字是零填充的字符串(第 26 行 pad),读屏器念 08 时可能读成零八,对时间播报更友好的是不加前导零。"
],
"apiCarrier": {
"kind": "props",
"note": "Vue 3 端载体只有 defineProps 声明的一个 target(Number);组件没有 emit 也没有插槽,显示形态由内部 computed 与写死的模板决定(frameworks/Countdown.vue3.vue:15-25)。",
"table": [
{
"name": "target",
"type": "Number",
"desc": "打开方式(frameworks/Countdown.vue3.vue:15)"
}
]
},
"resources": [
{
"file": "frameworks/Countdown.vue3.vue",
"kind": "Vue 3",
"desc": "该端实现(本页 API 与用法的唯一权威来源)。"
},
{
"file": "frameworks/Countdown.css",
"kind": "样式",
"desc": "该组件的样式文件,类名口径以它为准。"
}
],
"exampleIds": [
"countdown-ex-1"
],
"notes": [
"唯一的 prop 声明见 frameworks/Countdown.vue3.vue:15,默认值是工厂函数形式的一小时后。",
"定时器生命周期见 frameworks/Countdown.vue3.vue:18-19:onMounted 起 setInterval,onBeforeUnmount 清理。",
"差值兜底与四段拆分见 frameworks/Countdown.vue3.vue:21-25,天数段的 v-if 见第 3 行。",
"契约声明的驱动维度 unit / size 属设计词汇层,未作为 prop 写入本页。"
]
}