CHANGELOG · 2026-09-26
媒体播放器重做 + 待办清单交互优化 + 智能点名器修复 + 文档站直链修复
四件事:教学工具的媒体播放器做了一次彻底重做,待办清单的快速添加和截止时间选择全面重做,智能点名器修掉了界面偏左和长名字显示不全的问题并加了静音开关,更新日志、标签、益智游戏、AI、教学工具 这几个文档站章节首页也恢复了直链访问。
媒体播放器
教学工具站的媒体播放器(在线使用)原来有 4 个按钮控制 3 种播放模式、点「网页全屏」没反应、暂停图标显示成一个方框。这次把控件和播放逻辑整体重写了。
⚡ 优化
- 一套控件通吃音视频:原来视频有一套覆盖式控制栏、音频另有一套面板,两套音量/倍速互相打架。现在合并成一套,音频在舞台里显示为带旋转唱片的封面区。
- 播放模式合并成一个按钮:单曲循环、列表循环、随机播放三个按钮收成一个,单击循环切换
顺序播放 → 单曲循环 → 列表循环 → 随机播放,四种模式各有专属图标(编号列表 / ↻ 带「1」角标 / 双向循环 / 洗牌),按钮提示同步变化。上线后又修了两处:单曲循环和列表循环原本共用同一个循环图标看不出区别,角标「1」只有 5×9px 糊在图标上像个杂点,顺序模式的图标还是白色(看着像禁用)——现在角标是清晰的琥珀色数字徽章,四个模式图标颜色统一。 - 网页全屏真的能用了:
T或工具栏显示器图标,隐藏标题、列表、快捷键提示,只留画面占满网页。 - 进度条可以按住拖动了(原来只能点击),时间显示支持超过 1 小时的媒体(
1:30:00而不是90:00)。 - 倍速在切歌后保持;列表里音频自动显示时长;当前播放项自动滚动到可见位置;随机模式下「上一首」按播放历史回退,而不是随机跳另一首。
- 播放列表整块面板都是拖拽投放区,拖到面板外不会误触发浏览器直接打开文件;浏览器全屏时控制栏 3 秒无操作自动隐藏。
🐛 修复
- 暂停按钮显示成方框:换图标时代码漏掉了
fa-solid字体族 class,图标退化成正文里的豆腐块(播放/暂停、音量、静音都受影响)。 - 网页全屏点了没反应:脚本给
<body>加了.theater-mode,但页面上根本没有对应的 CSS 规则。 - 顺序模式播完最后一项会从头无限重播,现在顺序模式播完即停。
- 浅色主题下「添加文件 / 清空」按钮几乎看不见:页面用的是一批并不存在的 CSS 变量(
--bg-card、--border、--secondary等),已全部换成 design-tokens 里真实的主题变量,深浅色都跟随。 - 移除/清空列表后播放状态、时间显示、blob URL 残留的问题。
- 快捷键提示里写的
-+之前没有生效;焦点在下拉框/滑块上时按方向键会误触发播放器;M静音后图标不更新。 - 移动端没有 hover,控件可能点不到;音频在浏览器全屏里是一大片空白黑屏。
⚡ 内置样例音频移除
原页面会预置一段「Oscar 严选」样例音乐(一个 4.5MB 的 mp3,每次打开都要下载一遍),现已连同 mp3 文件一起从站点和代码里移除,播放器只播放你自己添加的文件。
待办清单
待办清单(工具站 → 待办清单)的三处交互重做。解析能力没变,明天下午3点 开会 / 一分钟后 喝水 / 3天后 交材料 这些写法照旧识别,只是输入时能立刻看见识别结果,日期和时间的挑选也不再被浏览器原生弹层破坏主题。
⚡ 优化
- 边打字边高亮日期和时间:在底部输入框里键入时,被识别成日期/时间的片段会实时标成蓝字 + 浅蓝圆角底色,不用等到回车后打开详情才知道解析对不对。任务标题里夹着时间片段时也照样能标(
明天下午3点 季度评审 #会议→ 日期和时间两段分别标出),#标签用等长空格遮罩后再解析,所以标签不会让高亮位置错位。 - 截止日期改成自绘月历:支持左右切换月份、跨月日期直接点选,底部有「今天 / 明天 / 下周 / 周末」快捷项;选中日期后日期框显示成
明天、9月28日 周一这种带星期的完整文案。今天有描边、选中为蓝底、周末标红。 - 截止时间改成自绘双列滚轮:左列小时、右列分钟,弹层里的
现在 / 上午9点 / 中午12点 / 下午3点 / 晚上8点快捷项一键填入;点格子即时更新到输入框上,弹层保持打开方便连续调时/分。打开时当前选中项自动滚到中间。
✨ 新增
- 截止时间终于可以清除了(之前只能选不能清):时间弹层底部有「清除」,填了值之后日期/时间框右上角还会出现一个
×,点一下即清空。日期同样支持清除。
🐛 修复
- 深色主题下日期/时间选择框是刺眼的白底:原来用的是浏览器原生
input[type=date]/input[type=time],弹层完全由浏览器渲染,不跟随站点主题,深色模式下白底黑字非常突兀。现在两个弹层都用 CSS 变量自绘,深浅色与站内其它界面一致。 - 时间弹层一点就自己关掉:给按钮的 focus 会触发一次
scroll事件,之前被当成「用户滚动了页面」而直接关掉弹层。改为只有锚点真的发生位移时才关闭。 - 时间弹层打开时选中项没居中:
.timepick-col少了position: relative,选中项的offsetParent落到了弹层容器上,滚动坐标整体偏移一截,打开时看到的是中间几小时而不是当前时间。 - 深色模式下快速添加输入框看不见字(上线后当天发现并修复):高亮功能把输入框文字设成了
transparent、改由镜像层显示,一旦镜像层没接管(模块缓存不一致、脚本报错)输入框就是一片空白。现在改成只有镜像层确认接管时才透明,任何情况下文字都由输入框自己按主题色显示——最坏情况只是没了高亮,不会连输入的字都看不见。 - 顺带修掉一个更隐蔽的坑:入口
index.html只给app.js加了版本号,模块之间是裸import,浏览器会把./render.js和./render.js?v=xxx当成两个不同模块(各自独立实例、模块内变量不共享)。部分加版本号时drag.js会拿到另一份render.js,里面的ui还是空的,initDrag()抛错直接中断init(),连带主题切换、通知铃铛、云端同步、快捷键、提醒服务全部失效。现已把全部 15 个模块的 import 统一带上版本号,并在app.js顶部把这条铁律写进注释。
一并修好了自绘选择器的边界:详情面板重绘、保存任务时会主动收起弹层,不会留下悬空的浮层。
智能点名器
智能点名器(文档)的界面之前整块贴在页面左边,短屏上还会把按钮挤出可视区;抽到长名字时名字会被裁掉一半;语音播报也没法关。
✨ 新增
- 静音开关:点名页右上角新增 🔊 / 🔇 按钮,一键开关语音播报;状态记在浏览器本地,下次打开保持上次的选择。正在播报时点静音会立刻停止朗读。
🐛 修复
- 界面整体偏左:样式里
body { display: flex少写了一个分号,浏览器把display: flex和flex-direction: column一起当成无效声明丢掉了,body退回默认的块级布局,居中失效,800px 宽的卡片就贴在了左边。 - 长名字显示不全:名字显示区高度写死成
1.2em(一行高),名字超过一行时第二行被裁掉。现在进入点名时按名单里名字实际占用的行数预留显示区高度,两行名字完整显示,一行名字垂直居中,滚动过程中布局也不会跳动。 - 抽中名字的紫色光晕:中奖名字原本带一圈硬编码的紫色
text-shadow(rgba(106,0,255,.5),和主题配色无关),看着发脏,已去掉,只保留主题强调色和弹出动画。 - 短屏内容被裁:窗口不够高时(原来在 1280×720 下就会发生)名单区和模式按钮会被切掉且页面无法滚动。现在卡片高度随视口收缩,名单区自己内部滚动,窄屏改为整页滚动。
- 页面控制台报错:
init()调用了一个不存在的updateUI()。
🐛 文档站章节首页恢复直链访问
更新日志、标签、益智游戏、AI、教学工具 这几个章节首页现在可以直接打开、刷新、分享和收藏了。之前它们只在"站内点击"时看起来正常(前端路由不发请求),一旦直接访问 URL 就是 404 或 403。
- 更新日志首页 404:服务器上「禁止访问的敏感文件」规则里有一条不区分大小写的
CHANGELOG行尾匹配,把正常的/changelog页面误判成了敏感文件。已改为精确放行该路径。 - 章节首页 403:标签、益智游戏、AI、教学工具 这几页在构建产物里同时存在"目录 + 同名
.html"(目录只放子页面),URL 兜底规则先去匹配目录,于是跳到/xxx/之后变成 403。已调整为先命中.html。 - 带尾斜杠的写法也一并兜住:
/changelog/、/tags/、/games/、/ai/、/teaching-tools/,以及更新日志条目带尾斜杠的形式现在都能正常打开,内容与不带斜杠的规范 URL 完全一致。 - 修复后上述地址全部返回 200;不存在的路径仍然正常返回 404。
这一项是部署基础设施(服务器 URL 路由规则)的修复,页面内容本身没有变化。