我为自己造了一扇门

为你而开的门。在这里,一个人卸下所有心事,不必带着文字离开。

💡 灵感来源:喵大大

估值1万 · 仅售1次· 版权交付 专属MV主题曲 完整开发故事

人到中年,最沉重的不是奔波劳碌,而是满心的委屈与压力,连一个倾诉的人都找不到。深夜里,卸下一身疲惫,坐在沙发上,想找个人说说话,翻遍通讯录,却终究还是把手机熄了屏。年迈的父母,鬓角已染霜雪,我怎能把生活的风雨、赚钱的焦虑,说给他们听,让他们本该安享的晚年,再添忧心?终日操劳的妻子,忙着柴米油盐、打理家事,那些压得我喘不过气的经济压力、工作挫败,说了不过是徒增她的烦恼,让她跟着我忧心忡忡。还有正在读书的孩子,眼里满是纯粹与懵懂,我舍不得让世俗的沉重,过早磨掉他的天真,更不愿让他小小的肩膀,扛起本不该属于他的重担。那些说不出口的难,那些无人能解的愁,像一块石头,压在心底,日复一日,越沉越重。我笑着扮演着坚强的丈夫、可靠的父亲、孝顺的儿子,可只有自己知道,心底的弦,早已绷得太紧。我怕,怕哪一天,这根弦突然断裂,所有的情绪彻底崩塌。这份煎熬,终于在一个失眠的深夜,催生出一个清晰的念头:我要造一个地方,一个没有身份、没有顾虑的角落,不用伪装,不用隐瞒,能让我把心底所有的话,毫无保留地倒出来,不用怕隐私泄露,不用盼着有人回应,只是单纯地,给心底的压力,找一个可以安放的归处。

事情要从一个失眠的深夜说起。

那晚我坐在电脑前,盯着屏幕发呆。心里的憋闷像一团化不开的雾,那些压在心底、说不出口的话,在深夜里愈发清晰,却依旧找不到任何可以倒出去的地方。微信不行——那是热闹的广场,挤满了熟人,容不下半分脆弱;备忘录不行——字写在那里,就像埋下一颗隐患,万一有人拿我手机,所有心事便会暴露无遗;微博、朋友圈更不行,一言一行都被注视着,连倾诉都要小心翼翼。

我需要的是:一个绝对没有人、绝对安全、说完就消失的地方。

我想了整整一夜。天亮的时候,我的浏览器搜索记录已经变成了一串诡异的关键词:怎么在网页上做星空、如何画一个黑洞、宇宙虚空代码、网站怎么让人感觉像进了另一个空间。

我不会写代码。但这不重要。

在接下来的一周里,我挤尽所有深夜的时间,把自己关在书房,开始疯狂自学。我像一个误入深山的野人,在互联网的丛林里东翻西找,只挑网站必需的知识学,不贪多、不拖沓。HTML我用一天就摸透了——就是搭积木;CSS也很快上手——给积木刷漆;JavaScript最费功夫,我连着三个深夜啃教程、练代码,终于能写出一个能让星星在屏幕上飘动的脚本。

第一版做出来的星空特别丑。星星全挤在左上角,因为我不知道每个星星的X坐标要写`Math.random() * window.innerWidth`,我把宽度写死成了500。调试的时候,所有星星排着队往左上角跑,像一群逃难的难民。我盯着屏幕看了半天,突然觉得很像我自己——也是被困在一个角落,不知道怎么往更远的地方走。

后来改好了。星空终于铺满了整个屏幕,几百颗星缓慢地飘动。我半夜关掉房间里所有的灯,看着那些星星,觉得像是把自己心里想说的话一个一个地点亮了。

接下来我要做一个“信物”。什么东西能让人感觉自己是拿着一个通行证从上一个来这里的人那里接过来的?

我先是画了一把钥匙——越画越不对劲。钥匙太普通了。全世界都在用钥匙开门,用钥匙锁车,用钥匙打开快递箱。这个空间不需要钥匙。它需要一个更轻、更没有重量的东西。

最后我在纸上画出了一根羽毛。它是发光的,从虚空中飘落下来,你不知道它是从哪个方向来的——就像上一个离开这里的人留下的善意,你永远不知道他的名字,但你能接住他的温度。

我给这根羽毛取了个名字:光羽。但是怎么让它在页面上动起来?我在搜索框里输入“CSS羽毛浮动动画”——除了一个羽毛球教程什么都没有。后来我是这么干的:我把羽毛做成一个图片,然后给这个图片写了一个浮动动画,用数学公式算它上下摆动的弧度。那两个深夜,我的草稿纸上全是sin和cos的计算,像在准备高考,连指尖都沾着未干的墨痕。

然后是“放下吧”三个字。这三个字是整个入口的灵魂。

我想让它们从星空中飞过来。不是弹出来,不是滑出来——是飞过来。从很远很远的地方,由小变大,大到充满整个屏幕,再缓缓退回合适的位置。

为了实现这个效果,我试了将近三十个版本。第一个版本,字直接弹到屏幕上,太快。第二个版本,字飞得跟蜗牛一样慢——整整花了十秒才飞到眼前,我自己都等不下去。第三个版本,放大效果是有了,但“放”字飞完之后“下”字根本不出现,我盯着屏幕等了半天,一度以为浏览器死机了。后来发现是我把触发条件绑错了对象——第二个字在等第一个字发一个信号,但第一个字根本没发那个信号。

那几个深夜,我的浏览器历史记录惨不忍睹:JavaScript动画同时触发、setTimeout清理问题、CSS transform不生效、动画卡顿怎么排查。每一条我都点进去看过,每一条看完之后都立刻坐回电脑前,改一版代码,再试一次,直到东方泛起鱼肚白。

最崩溃的一次是在“放”字飞退出去之后,整个页面彻底黑了。连星星都没了。我揉揉眼睛,以为是我视力出问题了。检查发现,我把整个屏幕的颜色跟着字一起设成了透明。星空还在——只是我看不见了。

但最后我还是调出来了。飞来三秒,停留两秒,远去两秒。一个字接一个字,不赶也不慢,像有人在深夜里慢慢唤你的名字。

那晚我坐在电脑前,看着“放”字从星空的极深处飘过来,越来越近,越来越亮,最后轻轻停在眼前。我觉得鼻子有点酸。不是因为累。是因为我忽然觉得——这个空间,它真的存在了。它不是网页,不是代码,不是浏览器。它是另一个世界,而我是第一个走进来的人。

接下来是羽毛的交互。用户点击羽毛之后,会展开五行文字,告诉他这片羽毛的来历。我想让这五行字一行一行地出来,每一行停留几秒。

如果你觉得这很简单,那你一定是没写过异步代码。

我第一版:点击之后毫无反应。检查了半天,原来我把事件监听写在了还没创建的DOM元素上。第二版:等了半天,突然一次性全出来了。第三版:行与行之间隔了十五秒,漫长得像在等一封信从另一个星球寄过来。第四版:点击之后出来了两遍文字——因为我忘了清除上一次的定时器。第五版:字是出来了,但是所有行混在一起,第一行叠在第三行上面。

我差点把键盘摔了。但我没有。我走到阳台上站了一会儿,吹着夜风,忽然想到一个笨办法:我不要让程序去“判断”什么时候出来下一行。我把所有的时间写死——第一行0秒开始,第二行1.5秒开始,第三行3秒开始。谁也别管谁,各自在各自的闹钟上跑。

我回到桌前,敲完最后一行代码。运行。五行文字依次浮现,间隔恰好。我往后一倒,觉得颈椎都断了,但嘴角是翘着的。

两扇门的设计,又花了我一天多的时间。我不敢耽搁,每一个细节都反复琢磨,只求简洁实用,贴合我想要的倾诉感。

一扇叫“无声的树洞”。你走进去,坐在一张深夜公园的长椅上,一盏老式路灯从头顶照下来。页面上浮现一个半透明的对话框。你写下所有不能对别人说的话,然后用手指往下一滑——那些文字就彻底沉入了虚空。

做出“往下滑文字消失”这个交互,花了我大半天时间。我希望能泛起一圈淡淡的涟漪——像一滴水滴进无边的深水里。涟漪做了很久都不满意——太大了像在滴墨水,太小了根本看不见。最后我用Canvas画了一个极小的圆圈,让它在一秒钟内慢慢扩散、慢慢变淡。效果出来了,我觉得自己像个发现了新元素的科学家,所有的疲惫都烟消云散。

另一扇门叫“微光自语”。黑暗中飘浮出一句句问话:“今天你做了什么让自己骄傲的事?”如果你被某一句触动了,就伸手碰它一下。触碰之后会浮现一个书写框,让自己给自己写一些话。写完,往上轻轻一滑——微光就被点亮,慢慢飘向夜空。

在夜空之上,还有很多很多颗微光。你分不清哪一颗是你的,但你知道——它在。

一个往下,沉入宇宙深处。一个往上,飘向群星之间。我觉得这就是放下的两个方向,一个卸下,一个看见。

中途找朋友测试。第一个反馈就差点让我把胃吐出来:“点完羽毛,等了半天什么都没出来,以为卡住了。”

我一查,又是那个老问题。异步处理的锅。

那两天的心情像坐过山车,毕竟工期紧张,每一个小问题都让我格外着急。每次以为修好了,下一个测试就会发现新问题。改完之后他再测,说现在出来了,但是等的时间好长。我又调间隔,调完之后他说太快了没看清。我深吸一口气,对着屏幕默念了三遍“这是我自己选的事”,又重新坐下来微调参数。

另一个朋友测完之后沉默了好一会儿,说:“我说了些真话进去。然后真的没了。我觉得自己好像被原谅了。”

我听着,没有接话。但心里像有什么东西轻轻落了地。

网站基本成型后,我用半天时间加了后台和防复制机制。后台入口设在一串谁也猜不到的路径上,防复制原理是让网站核心依赖一个藏在数据库里的密钥——如果有人把代码全拷走放在另一台服务器上,没有那个密钥,整个网站就是一堆空白页面。

这个机制我也是边查资料边做,集中精力赶工,半天时间就完成了。为了让代码被复制之后也跑不起来,我查了很多技术资料,做了多层加密。我对那个看不到的小偷轻轻笑了一下,这是我为自己的秘密,加的最后一道防护。

现在,“放下吧”已经上线了。你打开它,依然是那片深蓝色的虚空。光羽依然在飘荡。无声的树洞里,长椅依然空着,路灯依然亮着。微光自语里,那些温柔的问句依然在等你触碰。

它不完美。有些东西我一直没调出来。比如入口那个光点,我希望它是一粒非常微小的星尘,周围有几颗更小的粒子在缓缓绕着它转——但我怎么做都做不出那种感觉。还有一些页面之间的过渡,总像门轴缺了一点油。

但我对自己说,没关系。留下一点遗憾,就是留给以后一点念想。

上线那晚,我关掉房间里的灯,打开“无声的树洞”,在长椅上坐定,写下了一段憋了很久的话。然后我向下轻轻一滑。文字沉了下去。

屏幕上什么也没留下。

我盯着那片虚空看了很久,然后轻轻说了一声:“好了。”

没有人听见。但虚空泛起了一圈淡淡的光。我在这里,这是我为自己造的门。

你也有类似的念头吗?

每一个故事,都开始于一个念头。把你的灵感告诉喵大大,一起把它变成属于你的故事。

开始 →