Hacker News 中文摘要

RSS订阅

为网页打造动态 ASCII 艺术 -- Animated ASCII Art for Web Pages

ascii.rest 是舒巴姆(Shubham)以 @bas3line 名义做的项目,提供可直接用在网页上的动画 ASCII 艺术。站点把作品分成两类:一类是 13 个场景,包括 alpine dawn、aurora fjord、deep reef、earthrise、kyoto dusk 等,从高山黎明、极光峡湾到深海礁石与恒河河坛各有画面;另一类是 12 个 UI 组件,如开机日志、方框边框、日历、数字时钟、分隔线、文件树、表单控件、404 页面、进度条和骨架屏,都是终端风格的界面元素,每个作品都配独立页面。

正文

animated ascii art for web pages

ascii.rest,作者 @Shubham,源码在 GitHub。

191 个面向网页的可动 ASCII 作品:13 个全彩场景(如上图)、加载器、图表、文字、27 个语言 logo 和 22 个 Linux 发行版(彩色或单色墨水),还有 3D 形状、物理模拟和生物。每一个都是小巧的、带类型标注的 TypeScript 模块,没有依赖,可用于 React、Next.js、Astro 或普通 HTML 页面,MIT 许可下免费使用和修改。

use one

html

引入 <script type="module" src="https://ascii.rest/ascii.js"></script>,再写 <ascii-art piece="donut"></ascii-art>。无需安装、无需构建步骤。ascii.js 定义 <ascii-art> 标签,从 ascii.rest 加载作品,只在其出现在屏幕上时播放,并为偏好减少动效的人保留第一帧。

react

安装 github:bas3line/ascii,从 ascii.rest/react 导入 Ascii,从 ascii.rest/pieces 导入 donut,然后写 <Ascii piece={donut} />。这是一个客户端组件,因此可以直接用于 Next.js 的 app router。也可以只传名字 piece="donut",在挂载时才获取作品。

astro

从 ascii.rest/astro 导入 Ascii,写 <Ascii piece="donut" />。首帧在服务器端渲染,因此页面在任何脚本运行之前就是完整的,加载后再播放。

typescript

从 ascii.rest 导入 mount,从 ascii.rest/pieces 导入 donut,取一个 pre 元素后调用 mount(el, donut)。mount 在 <pre> 中播放作品,彩色作品则在 <canvas> 上,并返回一个停止播放的函数。每个作品、选项和帧都有类型。

art

scenes 13

  • alpine dawn 雪峰在静谧雾湖之上接住第一缕光
  • aurora fjord 极光帘幕在静谧峡湾上起伏,岸边一间小屋亮着灯
  • deep reef 光柱、摇曳的海藻,一群鱼在礁石上转身
  • desert night 无月沙丘上银河横在孤树上方,流星坠落
  • earthrise 地球从布满环形山的月平线上升起,光线长而低
  • kyoto dusk 黄昏中的宝塔,身后樱花树被石灯笼照亮
  • marine drive 孟买“女王的项链”夜景,路灯沿湾岸弯曲
  • misty forest 松林山脊隐入晨雾,阳光斜穿
  • night coast 灯塔在月光云层下转动光束,海面深暗
  • ocean sunset 太阳落在松树海岬之后,云被照亮,起伏的海面闪光
  • storm plains 黄昏的砧状雷暴云在麦田上方闪烁
  • taj dawn 日出时的泰姬陵,在晨雾中倒映于水池
  • varanasi ghats 恒河黄昏的阿尔提,台阶上的灯与水面的油灯

components

ui 12

  • boot log 自检统计内存,然后启动日志滚过
  • box frames 十二种边框样式可复制,每种都带标注
  • calendar 像 cal 一样的本月日历,今天带方括号,下方时间在走
  • digital clock 七段数码显示的本地时间,冒号闪烁
  • dividers 用于章节之间分隔的线条与装饰,从朴素到华丽
  • file tree 目录树逐层展开,再合上
  • form controls 终端风格的表格被逐字段填写
  • not found 方块字 404,下方飘着一个小幽灵
  • progress bar 五种进度条样式以不同速度填充,右侧显示百分比
  • skeleton 加载卡片由灰度块组成,一道微光掠过
  • spinners 十二个加载转轮并列,各带名字
  • terminal 一个 shell 会话:输入命令、输出、滚动、清屏

data 10

  • bar chart 柱状图在三组数据间缓动,数值标在柱顶
  • candlesticks 上涨为空心蜡烛,下跌为实心,最后一根实时成形
  • cpu meters htop 风格的核心、内存和交换分区表,上方是进程列表
  • equalizer 频谱柱随节拍跳动,峰值帽缓慢下落
  • gauge 半圆表盘,指针会冲过每个新读数
  • heartbeat 心电图轨迹扫过上一轮,附心率读数
  • heatmap 贡献日历,一天一格,周向左滚动
  • radar 旋转扫描带余辉,目标在两次扫掠之间淡出
  • sparkline 三条实时块状迷你图向左滚动,数值在右侧
  • uptime bar 三项服务的 60 天在线条,新的一天滑入

type 9

  • big text 方块字横幅,带线影和掠过的闪光
  • dissolve 文字碎成尘埃,再凝聚成下一句
  • glitch 像素文字在短促爆发中撕裂成滑动的切片
  • marquee 滚动的 LED 招牌,四周是追逐的灯泡
  • morse 一盏灯敲摩尔斯,纸带留下记号,字母被解出
  • scramble 短语从闪烁的字形中自左向右解码
  • split-flap 翻牌式出发板,每次翻向新的一行
  • typewriter 光标闪烁,短语依次被敲出又删掉
  • wave text 一道波浪自左向右穿过一行文字

logos 27

每个 logo 都会不时闪光。

  • c 蓝色六边形上的 c
  • c# 紫色六边形上的 c#
  • c++ 蓝色六边形上的 c++
  • clojure 绿蓝圆圈中的 lambda
  • css 带 3 的蓝色盾牌
  • dart 蓝青色的飞镖
  • elixir 紫色水滴
  • erlang 括号中的红色 e
  • go 带速度线的 go
  • haskell 角、lambda 和等号
  • html 带 5 的橙色盾牌
  • java 冒热气的杯子
  • javascript 黄色方块上的 js
  • julia 绿、红、紫三个圆点
  • kotlin 紫罗兰与粉色的 k
  • lua 一颗行星和它的月亮
  • ocaml 橙色方块上的骆驼
  • perl 洋葱
  • php 紫色椭圆中的 php
  • python 蓝黄两条蛇
  • r 灰环上的蓝色 r
  • ruby 切割的红宝石
  • rust 齿轮中的 r,Ferris 橙
  • scala 红色螺旋楼梯
  • swift 橙色方块上的雨燕
  • typescript 蓝色方块上的 ts
  • zig 括号中倾斜的 z

distros 22

每个都会不时被扫描一遍。

more

shapes 12

  • cube 点状的隐藏线立方体,每次转四分之一
  • dna helix 带碱基对的双螺旋绕轴旋转
  • donut 受光的圆环面绕两轴旋转,致敬 donut.c
  • glxgears 三个啮合的齿轮转动,致敬 glxgears
  • gyroscope 万向环绕旋转的转子摆动,轴保持不动
  • heart 有光泽的 3D 心脏摇摆,扑通扑通跳
  • icosahedron 线框二十面体旋转,隐藏边为虚线
  • mobius strip 莫比乌斯带旋转点头,光从上方来
  • spring 重物在螺旋弹簧上弹跳,簧圈挤在一起
  • tesseract 四维超立方旋转,各个立方体互相穿过
  • torus knot 三叶结画成受光的管,缓慢旋转
  • twisted ring 方环扭转四分之三,只剩一个面

space 11

  • black hole 黑洞,被引力透镜的盘旋转,一侧更亮
  • earth 受光的地球旋转,大陆来自五度分辨率地图
  • eclipse 月球滑过太阳;先见钻石环,再见日冕
  • galaxy 倾斜的旋涡星系旋转,内侧恒星最快
  • moon phases 月球盈亏,月海在光中更暗
  • planet 带条纹和环的行星旋转,两个方向都有阴影
  • rocket 火箭夜间从发射台升空,然后落回
  • saptarishi 北斗七星在真实位置,天空闪烁
  • solar system 四颗行星在虚线轨道上,周期依开普勒第三定律
  • starfield 恒星从中心冲出,边缘拖成条纹
  • three-body 三个等质量天体共享一条 8 字轨道

physics 14

nature 16

  • aurora 极光帘在星空下的林线之上起伏
  • bonsai 一盆树落叶,又重新发芽
  • campfire 木柴火闪动,火星升起;墨越密越热
  • cherry blossom 开花的樱枝在风中落瓣
  • contour map 等高线构成的岛,山丘缓慢改形
  • fern 巴恩斯利蕨逐点填满,然后摇摆
  • fireflies 夜草上的萤火虫,一次闪光在它们之间传开
  • fractal tree 递归分枝的树在风中摇动
  • landscape 山脉与湖,头顶是当地时间对应的日或月
  • lightning 雨中分叉的闪电从风暴云里劈出
  • rain 三个层次的斜雨,水花与水洼涟漪
  • ruled mountains 平行线中升起山脉,向前漂移
  • sea swell 长浪托起小帆船,又从下面滚过
  • snowfall 雪摇摆落下,在地上和栅栏边堆成雪堆
  • sunrise 太阳从海平线升起,光路闪烁
  • wind 阵风沿弯曲的线流动,在头部卷起

creatures 10

  • aquarium 鱼在水箱里游动转身,气泡与水草
  • butterfly 蝴蝶振翅滑翔,沿蜿蜒路径
  • cat 虎斑猫枕着爪子睡着,缓慢呼吸
  • fox 狐狸睡在自己尾巴上,呼吸,偶尔偷看
  • jellyfish 水母脉动上浮,触手滞后拖曳
  • owl 树枝上的猫头鹰缓慢眨眼并转头
  • snake 蛇沿 S 曲线滑行,吐着舌头
  • spider 蜘蛛顺着丝下降,再爬回去
  • starlings 椋鸟群盘旋,被路过的隼冲散
  • whale 鲸喷水、弓背下潜,尾鳍最后消失

objects 14

  • analog clock 圆形表盘显示本地时间,秒针滴答
  • candle 蜡烛在烛台中闪烁烧短,再被换新
  • coffee 咖啡杯在碟上,热气卷起
  • ferris wheel 摩天轮在 A 形架上转动,座舱保持竖直
  • hawa mahal 斋浦尔风之宫夜景,灯在花格窗后
  • hourglass 沙从瓶颈流下,然后被翻转
  • kite 菱形风筝乘风,风停时线松垂
  • lava lamp 蜡块在点亮的玻璃中上升、合并、下沉
  • lighthouse 礁石上灯塔的光束扫过夜海
  • skyline 夜里的城市,窗户明灭,天线闪烁
  • sundial 斋浦尔的萨姆拉特·扬特拉,影子按当地时间设定
  • train 蒸汽火车过轨,身后喷出烟雾
  • vinyl 从上方看唱片在唱臂下转动
  • windmill 荷兰磨坊的四片格状风帆转动,云经过

generative 13

  • epicycles 一串旋转的圆,末端描出一颗星
  • flow field 粒子轨迹汇聚成蜿蜒、交并的流
  • glider gun 高斯帕滑翔机枪每 30 代发射一架滑翔机
  • hilbert curve 两条希尔伯特曲线组成的闭合环,两个发光的奔跑者
  • julia set 朱利亚集随常数 c 绕行而改变形状
  • langton's ant 先有序,再混沌,然后蚂蚁修起自己的高速公路
  • mandelbrot 缓慢推进海马谷,再拉回
  • maze 迷宫由回溯法刻成,然后被解开,再重造
  • plasma 柔和的干涉斑块漂移脉动
  • reaction diffusion 格雷-斯科特斑点与条纹消退又长出
  • rule 30 一个细胞在 30、90、110 号规则下逐行长出
  • sierpinski 混沌游戏逐点填满谢尔宾斯基三角
  • voronoi 地面按最近的漂移种子划分成格

effects 8

  • doom fire PSX 火焰扩散,火舌从白热的底部爬升
  • fireworks 烟花升空炸开成牡丹、环、柳和棕榈
  • matrix rain 字形流下落,头部重,后面稀
  • rotozoomer 砖墙纹理绕中心旋转缩放
  • sparks 角磨机甩出火花,成弧、跳跃、冷却
  • synthwave 网格朝山脊后带条纹的太阳滚动
  • tunnel 沿着一条弯曲扭动的瓷砖管道飞行
  • tv static 老电视的雪花,调到测试卡又失掉

评论

社区普遍赞叹这些动画的场景美感与怀旧气息,分歧主要在于其究竟算不算ASCII艺术以及是否适合作为界面元素。

赞叹作品美观并引发怀旧情怀

  • 较多人赞赏其视觉享受,有人联想到早期BBS动画、SSH终端场景记忆或类似文档动画项目,还有人想将其作为数字相框墙艺术(较多人) > 滚动浏览时惊叹于作者的乐趣,自然动画让我想买数字相框当墙艺术(@burmask)

质疑并非真正的ASCII艺术

  • 少数人指出作品中不同大小的圆点实为Unicode字符而非ASCII,场景类似抖动处理而非传统字符画(少数人) > 这看起来美观但根本不是ASCII艺术,那些大小不一的点不是ASCII字符(@boguscoder)

认为装饰性强不适合常规界面

  • 少数人觉得整体风格极度繁复装饰,作为动画欣赏可以,但不愿其出现在用户界面或终端界面中(少数人) > 其余部分非常繁复装饰,我喜欢动画本身但不想它们成为界面一部分(@thih9)

动画展示与兼容性问题

  • 部分用户反馈部分动画行序错乱、自旋器页面剧烈振动,或由于系统减少动态设置而未看到动画,希望演示页提示适配(少数人) > 自旋器页面在宽度变化时振动得让人恼火(@ZeWaka)

好奇为何ASCII艺术现在回潮

  • 有人对比其他类似项目,疑问ASCII存在已久为何当前变得流行,猜测是趋势(少数人) > 昨天刚被另一个动画站迷住,这个更厉害,为什么现在这种东西多了起来,只是潮流吗(@marinhero)

有价值的补充

  • 有用户做了类似的小工具用于显示AI编码工具的工作状态,体现此类需求的小规模实践(@robbomacrae)
  • 将作品比作把特斯拉改装成雪铁龙2CV,巧妙讽刺其披着技术朴素外衣却未受字符限制(@gavmor)
  • 有用户因系统无障碍设置未看到动画,但肯定这种减少动态的适配值得称赞,并希望演示更明显标明(@BugsJustFindMe)
  • 有读者请求作者提供创建工具以便用户自制这些场景(@davidcollantes)