当前位置: 首页 > news >正文

PPT Timer:一个置顶于PPT全屏放映之上的LCD倒计时器

演讲超时?课堂拖堂?用一个赛博朋克风格的桌面倒计时器,帮你精准掌控每一分钟。

痛点

讲PPT的时候,你大概率遇到过这些场景:

  • 答辩给了8分钟,讲到一半才发现已经过了6分钟
  • 手机计时器被PPT全屏挡住,根本看不到
  • Windows自带的闹钟在全屏模式下不弹出
  • 市面上的计时器软件要么丑得离谱,要么不能真正置顶在PPT放映模式之上

核心矛盾很简单:PowerPoint的放映模式会独占全屏,普通窗口根本显示不出来

PPT Timer 就是为了解决这一个问题而生的。

它长什么样

黑底荧光绿,DSEG7液晶字体,模拟真实LCD面板——上世纪终端机和考试用电子钟的既视感:

┌──────────────────────────┐ │ TIMER × │ │ ┌──────────────────────┐ │ │ │ 05:00 │ │ ← DSEG7 七段液晶数字 + 荧光绿发光 │ │ (88:88) │ │ ← 底层灰暗底纹,模拟未点亮的LCD段 │ └──────────────────────┘ │ │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ← 30段LED进度条 │ ▶ ↺ │ ← 播放/暂停 + 重置 │ 01 03 05 08 15 + │ ← 预设按钮(分钟) └──────────────────────────┘ ↑ 1px荧光绿边框,终端风

核心特性

真正的置顶—— 使用 Electron 的screen-saver级别窗口层级,比系统级别的alwaysOnTop更高一层。PPT放映模式、游戏全屏、视频播放器——都挡不住它。

win.setAlwaysOnTop(true,'screen-saver');

这一行是整个项目的灵魂。Electron 提供了多个置顶级别(normalfloatingtorn-off-menumodal-panelmain-menustatuspop-up-menuscreen-saver),screen-saver是最高级别,连屏保都压得住。

60fps 流畅计时—— 没有用setIntervalsetInterval在后台标签页或高负载时会被浏览器降频,导致倒计时不准。PPT Timer 使用requestAnimationFrame+ delta time 差值计算:

functiontick(timestamp){constdelta=timestamp-lastTick;lastTick=timestamp;remainingMs-=delta;// ...requestAnimationFrame(tick);}

计时精度不依赖定时器的调用频率,而是依赖真实流逝的时间。

颜色渐变预警—— 倒计时不是只有数字在跳。整个界面会根据剩余时间改变状态:

剩余时间颜色效果
> 30s#00ff41荧光绿正常计时
10~30s#ffb000琥珀黄边框 + LED条变黄
< 10s#ff0040红色数字闪烁 + LED条闪动
0s红色全窗口闪烁3次

不需要盯着数字看——余光瞟到颜色变了就知道该收尾了。

技术实现

项目结构

ppt-timer/ ├── main.js # Electron 主进程:窗口配置 + 置顶策略 ├── preload.js # 安全桥接:contextIsolation + IPC ├── renderer/ │ ├── index.html # 界面布局 │ ├── style.css # LCD主题 + 动画 + DSEG字体 │ └── app.js # 计时引擎 + 状态机 ├── assets/ │ └── icon.ico # 七段LCD风格图标 ├── .github/workflows/ │ └── release.yml # CI:tag推送自动构建发布 └── package.json

总共不到600 行代码,零运行时依赖。纯 HTML/CSS/JS,没有 React,没有 Vue,没有 Tailwind。

窗口策略

无边框 + 透明背景 + 不可缩放,窗口本身是"隐形"的,只有中间那个280x320的黑色面板是可见的:

newBrowserWindow({width:280,height:320,frame:false,// 去掉标题栏transparent:true,// 背景透明resizable:false,alwaysOnTop:true});

拖拽通过 CSS 实现——标题栏区域设置-webkit-app-region: drag,按钮区域设置no-drag

窗口失焦时会重新声明置顶级别,防止某些场景下被其他窗口抢占:

win.on('blur',()=>{win.setAlwaysOnTop(true,'screen-saver');});

LCD 视觉效果

DSEG7 字体—— 开源的七段显示字体,通过 jsDelivr CDN 加载。底层叠了一层暗灰色的88:88作为LCD底纹,模拟真实液晶屏上未点亮的笔段。

Scanline 扫描线—— 用 CSSrepeating-linear-gradient叠加2px间距的半透明横线,模拟CRT/LCD的扫描线质感。

Glow 发光——text-shadow双层扩散,内层8px紧贴,外层20px弥散,模拟荧光管的发光晕染。

状态机

计时器有4个状态,转换路径明确:

idle → running → paused → running → ... → finished ↑ │ └──────────── reset ←──────────────────────┘

LED 进度条

不是圆环,不是线性进度条——是30个独立的小方块,逐段熄灭,像真实的LED阵列指示灯。最后10秒末尾的方块会高频闪动。

使用方式

下载安装

直接去 GitHub Releases 下载PPT Timer Setup 0.1.0.exe,双击安装。

从源码运行

gitclone https://github.com/ZengLiangYi/ppt-timer.gitcdppt-timernpminstallnpmstart

需要 Node.js 20+。

操作

  1. 点击底部预设按钮(0103050815)直接开始倒计时
  2. 点击+输入自定义分钟数
  3. 暂停/继续,重置
  4. 拖拽标题栏移动窗口位置
  5. 打开PPT放映 → 计时器始终在最上层

CI/CD:推 Tag 自动发布

项目配置了 GitHub Actions,工作流程:

git tag v0.2.0 git push origin v0.2.0

推送v*格式的 tag 后,GitHub Actions 自动在windows-latest上执行npm cielectron-builder --win→ 将生成的.exe安装包发布到 GitHub Releases。

整个流水线大约2分钟跑完。不需要本地装打包环境,不需要手动上传文件。

已知限制

  • 目前只打包了 Windows x64 版本(PPT放映主要是Windows场景)
  • 字体通过CDN加载,首次启动需要网络(后续有缓存)
  • 没有声音提醒(考虑到演讲场景,声音反而是干扰)

后续计划

  • 字体本地化打包,支持离线使用
  • macOS 打包支持
  • 可配置的预设时间组
  • 正计时模式
  • 多显示器场景优化

GitHub: https://github.com/ZengLiangYi/ppt-timer

下载: PPT Timer v0.1.0

协议: MIT — 随便用,随便改。

http://www.jsqmd.com/news/461729/

相关文章:

  • AI赛博飞升,我们离“仙界”还远么
  • OpenClaw 完整安装指南
  • windows通过wsl的方式安装ubuntu系统(含离线方式)
  • (windows)本地安装openclaw,完成配置并接入本地大模型(ollama)全流程指南
  • 浏览器自动将http访问链接自动转化为https链接,解决办法
  • c++ static关键字的详细用法和作用
  • Spring的IOC详解
  • 2026年苏州青少年篮球培训怎么选?这几家TOP机构值得关注!
  • Claude Code 隐藏功能大全:90%的人不知道这些
  • 150 万人被偷家之后,我翻了翻自己的 API Key 管理,冷汗直流
  • 帮朋友拆了一个机械臂问题,从误解到最优解
  • FFMPEG网络推流
  • 技术落地解析:深圳市兴通物联俄罗斯诚信标签条码比对系统,提升对俄出口合规效率
  • 2026年叔丁醇钾选购,江苏天泽新材料费用合理值得考虑 - myqiye
  • 跑步耳机挂脖好还是无线好?2026最适合跑步用的耳机真实体验分享
  • Python保护类内部私有变量,不允许外部类访问的一种简单实现
  • 口碑好的多肽修饰厂家2026年排行榜,哪家服务更贴心 - 工业推荐榜
  • OpenClaw本地私有化部署教程
  • 进口阀门市场发展趋势与工业应用解析
  • 矩阵论考题——答案
  • 和信通卡回收折扣对比2026,畅回收平台折脱颖而出 - 畅回收小程序
  • PbootCMS附件上传报错UNKNOW: Code: 8192; Desc: stripos()
  • 收藏!小白程序员必看:手把手教你玩转大模型上下文工程,提升代理智能
  • 亚马逊合规趋严,海外仓如何破解物流卡点,实现高效履约?
  • 2026年金华地区好用的日语高考培训学校排名 - mypinpai
  • docker安装nacos
  • 【金蝶云星空】如何给科目挂上核算维度
  • 本地ubuntu服务器上部署openclaw完整教程(详细图文)
  • 苏州小区停车场道闸系统推荐:智慧停车系统怎么选? - 品牌观察员小捷
  • 2026年全国气流粉碎机哪家好?实力筑牢精度与服务壁垒 一站式解决方案适配各类场景 - 深度智识库