你拖动网页上的一个滑块,月球从太空里缓缓转过身,露出环形山和山脉;再拖一下另一个滑块,视角切到地面,月亮从地平线爬进夜空。这不是NASA的官网工具,是一个人独立做的网页。
这篇叫《Moon》的文章出自开发者Bartosz Ciechanowski之手,他之前写过机械键盘、GPS、内燃机原理,都是这种可拖拽、可调参数的长篇交互科普。这次讲月球,发布于2024年12月17日,在Hacker News上拿到3128个赞、250条评论,程序员们讨论的重点不是月相,而是这背后到底写了多少代码。
一篇网页,拆开是半本教科书
它讲的内容远不止开篇那个引力沙盒。完整看下来,牛顿引力、地月质心、恒星月与朔望月的区别、天平动为什么能让人类看到59%的月面、潮汐锁定的成因、洋潮与角动量转移、轨道进动、月相与地球反照、日月食(包含2024年4月8日北美日食的场景重建)、月面撞击坑的光照渲染,全在一篇网页里。
全部效果用纯JavaScript和WebGL手写实现,没用React,没用Three.js,前端代码估算约1.76万行。这个规模,相当于一个中型开源项目的体量,却是拿来讲一个中学天文话题。
页面标着2026年,其实两年前就火过一轮
原始页面的元数据把发布时间写成了2026年6月30日,但Hacker News讨论的时间戳、作者同日在Patreon发的幕后创作说明《On 'Moon'》,都指向2024年12月17日。多方信源对得上,页面自己标的时间反而对不上。
这大概率是页面被后续更新过、或者抓取缓存出了错。提醒是简单的一条:碰到长期维护、不断打磨的个人网站,页面显示的"发布时间"不一定靠得住,得交叉对照发布当时的外部记录。
它和NASA Eyes、Stellarium不是一回事
NASA Eyes、Stellarium、Celestia这类工具,给你一个可以自由飞行的太阳系,规律要你自己找。《Moon》反过来:先锁定一个变量给你直觉,再放开下一个,一步步把复杂性喂进来。
一个具体差异:不少教学用的月相模拟器,比如UNL的经典版本,为了简化常年忽略月球轨道5度倾角这个细节——正是这个倾角决定了为什么不是每个朔望都会有日食月食。《Moon》没有绕开它,后续章节专门处理了这一层。
《诗经》里讲"如切如磋,如琢如磨",本是形容君子治学如工匠打磨玉器。用来形容这篇网页的制作方式,倒是贴切——每一处光影、每一个滑块的物理反馈,都是手工调出来的,不是框架帮你生成的。
开发者社区对"纯手写WebGL"这件事情绪激动,本质上是在为一种正在消失的工艺鼓掌。眼下大部分交互内容靠框架拼装,靠AI批量生成,这种一行行手写、追求每一帧都准确的做法,已经算是行业里的稀有物种。
精美到极致的手工艺,恰恰因为不可复制而稀缺。
但稀缺不等于可持续。这类内容极度依赖单一作者的技巧和耐心,任何机构想批量复制这套打法,投入产出比都难看。它能存在,靠的是作者个人愿意花多久时间,而不是某种可以规模化的方法论。
反方的声音也值得听一句:文章体量太大,不少读者体验完开篇的引力沙盒就划走了,后面几十个演示未必有人看到。技术做得越精美,越容易让人误以为"看懂了动画"就是"理解了原理"。
- 风险.交互再精致,也替代不了读者主动推导的那一步,划走比读完的人可能更多。
这也是这类"解释性长文"体裁一直没能规模化的原因——它对创作者的要求太高,对读者的耐心要求也不低。属于极少数人能做、极少数读者能读完的东西。
