你拖动网页上的一个滑块,月球从太空里缓缓转过身,露出环形山和山脉;再拖一下另一个滑块,视角切到地面,月亮从地平线爬进夜空。这不是NASA的官网工具,是一个人独立做的网页。

这篇叫《Moon》的文章出自开发者Bartosz Ciechanowski之手,他之前写过机械键盘、GPS、内燃机原理,都是这种可拖拽、可调参数的长篇交互科普。这次讲月球,发布于2024年12月17日,在Hacker News上拿到3128个赞、250条评论,程序员们讨论的重点不是月相,而是这背后到底写了多少代码。

一篇网页,拆开是半本教科书

它讲的内容远不止开篇那个引力沙盒。完整看下来,牛顿引力、地月质心、恒星月与朔望月的区别、天平动为什么能让人类看到59%的月面、潮汐锁定的成因、洋潮与角动量转移、轨道进动、月相与地球反照、日月食(包含2024年4月8日北美日食的场景重建)、月面撞击坑的光照渲染,全在一篇网页里。

全部效果用纯JavaScript和WebGL手写实现,没用React,没用Three.js,前端代码估算约1.76万行。这个规模,相当于一个中型开源项目的体量,却是拿来讲一个中学天文话题。

一篇网页的体量 17600 行手写代码 3128 Hacker News点赞 250 条讨论评论

页面标着2026年,其实两年前就火过一轮

原始页面的元数据把发布时间写成了2026年6月30日,但Hacker News讨论的时间戳、作者同日在Patreon发的幕后创作说明《On 'Moon'》,都指向2024年12月17日。多方信源对得上,页面自己标的时间反而对不上。

这大概率是页面被后续更新过、或者抓取缓存出了错。提醒是简单的一条:碰到长期维护、不断打磨的个人网站,页面显示的"发布时间"不一定靠得住,得交叉对照发布当时的外部记录。

它和NASA Eyes、Stellarium不是一回事

NASA Eyes、Stellarium、Celestia这类工具,给你一个可以自由飞行的太阳系,规律要你自己找。《Moon》反过来:先锁定一个变量给你直觉,再放开下一个,一步步把复杂性喂进来。

一个具体差异:不少教学用的月相模拟器,比如UNL的经典版本,为了简化常年忽略月球轨道5度倾角这个细节——正是这个倾角决定了为什么不是每个朔望都会有日食月食。《Moon》没有绕开它,后续章节专门处理了这一层。

两种月球工具的分野 开放探索型 NASA Eyes / Stellarium / Celestia 自由飞行,自己找规律 常简化轨道倾角等细节 更适合观测规划 叙事教学型 《Moon》 锁定一个变量,逐步放开 专门处理5度轨道倾角 更适合建立直觉

《诗经》里讲"如切如磋,如琢如磨",本是形容君子治学如工匠打磨玉器。用来形容这篇网页的制作方式,倒是贴切——每一处光影、每一个滑块的物理反馈,都是手工调出来的,不是框架帮你生成的。

开发者社区对"纯手写WebGL"这件事情绪激动,本质上是在为一种正在消失的工艺鼓掌。眼下大部分交互内容靠框架拼装,靠AI批量生成,这种一行行手写、追求每一帧都准确的做法,已经算是行业里的稀有物种。

精美到极致的手工艺,恰恰因为不可复制而稀缺。

但稀缺不等于可持续。这类内容极度依赖单一作者的技巧和耐心,任何机构想批量复制这套打法,投入产出比都难看。它能存在,靠的是作者个人愿意花多久时间,而不是某种可以规模化的方法论。

反方的声音也值得听一句:文章体量太大,不少读者体验完开篇的引力沙盒就划走了,后面几十个演示未必有人看到。技术做得越精美,越容易让人误以为"看懂了动画"就是"理解了原理"。

  • 风险.交互再精致,也替代不了读者主动推导的那一步,划走比读完的人可能更多。

这也是这类"解释性长文"体裁一直没能规模化的原因——它对创作者的要求太高,对读者的耐心要求也不低。属于极少数人能做、极少数读者能读完的东西。