前端小哥玩 HTML 复选框上瘾:能画 logo 做视频,还开源成 JS 库
消息来源:baojiabao.com 作者: 发布时间:2026-05-18
万万没想到,如此普通的复选框,竟也能玩出这种高度!
例如点一下复选框,屏幕就像被投入石子的水面泛出波纹:
设定好初始状态,就可以开始展示《生命游戏》的演化过程;
控制上下左右,还能还原经典游戏《贪吃蛇》;
这就是一位做前端开发的小哥 Bryan,近期在自己的网站上发布的有关 checkbox (复选框)的新玩法。
这个项目在 Hacker News 上引来了大量网友评论。
高赞评论已经给小朋友安排得明明白白了~
而面对一些诸如"为什么要用复选框,普通像素就可以达到这种效果"的质疑,也有人为 Bryan 说话:
回到这件事本身,其实在去年早些时候,他就建了一个名为 Checkboxland 的 JavaScript 库。
它可以将任何内容呈现为 HTML 复选框。
还有更厉害的玩法
讲真,刚才展示的复选框效果,只能说是"开胃菜"。
不仅仅是简单的动画,日常拍下的照片,记录的生活 vlog,一样可以成为"复选框"的素材。
小哥本人也一度以为灵感耗尽,但在参阅了一篇关于将图像转化为 ASCII 的文章之后,Bryan 将苹果的 logo 转化了出来。
小哥本人也是老二次元了,《Bad Apple》也是信手拈来:
随后,自嘲"the CheckBox guy"的小哥赋予了复选框更多的可能,他又拓展了 Checkboxland API,用来加载任何视频并生成复选框版本。
下面这个看起来就像进入了《星际穿越》的五维立方体。
而此刻你如果打开摄像头,Bryan 还可以带领你半只脚踏进《黑客帝国》~
赶快学起来,说不定还能用来画心形图,成为你的表白神器(不是)!
复选框花式玩法,什么原理?
看似炫酷的效果实际制作过程只需分为两大步,手把手教你!
1.做出原本的图像。
2.将图像转化为 ASCII 文本输出。
以水波为例,首先要生成这样动态的水波。
想要生成它,需要以中心为原点,在 xy 平面上建立正弦函数。
z 轴垂直屏幕向外,把 z 轴的数值转化为灰度,白色为波峰,黑色为波谷。
然后在图形计算器 desmos 上让水波动起来,这样第一步就完成了。
第二步,将第一步的成果转化为 ASCII 码输出。
这一步的转化主要涉及到将彩色对应灰度。
采用这个公式,即使是彩色的图片,也只不过是五彩斑斓的灰罢了~
GrayScale = 0.21 R + 0.72 G + 0.07 B
提取原图的 RGB 色彩,输出为灰度:
const toGrayScale = (r, g, b) => 0.21 * r + 0.72 * g + 0.07 * b;const convertToGrayScales = (context, width, height) => {const imageData = context.getImageData(0, 0, width, height);const grayScales = [];for (let i = 0 ; i < imageData.data.length ; i += 4) {const r = imageData.data[i];const g = imageData.data[i + 1];const b = imageData.data[i + 2];const grayScale = toGrayScale(r, g, b);imageData.data[i] = imageData.data[i + 1] = imageData.data[i + 2] = grayScale;grayScales.push(grayScale);}context.putImageData(imageData, 0, 0);return grayScales;};然后为每个像素赋灰度值:
const grayRamp = '$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`\'. ';const rampLength = grayRamp.length;const getCharacterForGrayScale = grayScale => grayRamp[Math.ceil((rampLength - 1) * grayScale / 255)];const asciiImage = document.querySelector('pre#ascii');const drawAscii = (grayScales) => {const ascii = grayScales.reduce((asciiImage, grayScale) => {return asciiImage + getCharacterForGrayScale(grayScale);}, '');asciiImage.textContent = ascii;};最后调整一下图片大小就大功告成了~ 更多详细内容见文后链接~
在线可玩,快来试试
在最近的更新中,Bryan 称,他创造新天地的事情将暂时告一段落。
但是他不仅留下了复选框新玩法原理的详细介绍,还有自制的丰富的 demos。这些足以让你探索创造。
简单的动画,贪吃蛇,通过摄像头实时生成复选框版图像(demos 中的 webcam)…
点击即可试玩,以贪吃蛇和 webcam 为例:
点击 snake,键盘上下左右即可控制贪吃蛇:
点击 webcam,打开前置摄像头,可以看到自己的实时动态:
根据网友的反馈,似乎在安卓系统中打开会白屏,但是在 Mac Safari, iPhone Safari, 桌面 Chrome 上都可以使用。
感兴趣的小伙伴,快来试试吧~
参考链接:
https://www.bryanbraun.com/2021/09/21/i-keep-making-things-out-of-checkboxes/
https://news.ycombinator.com/item?id=28826018
https://www.jonathan-petitcolas.com/2017/12/28/converting-image-to-ascii-art.html
https://www.bryanbraun.com/checkboxland/#demos
https://github.com/bryanbraun/checkboxland
2022-05-08 04:05:29相关文章
炒港股要补交多少税?我也接到催交补税特别行动的电话了2025-07-23 17:36:43
淘宝天猫仅退款属于诈骗吗?淘宝天猫开始部分取消仅退款2024-10-01 13:01:28
哈啰app借钱|哈啰借钱app下载安装免费小小上当和电话骚扰2024-10-01 11:22:38
白嫖党|山西大同大学学生网购申请“仅退款”被拒骂客服一小时2024-09-27 09:10:44
北大数学教授袁新意《姜萍事件的疑点分析》点评姜萍板书 阿里巴巴竞赛受质疑2024-06-28 10:07:40
天猫新规可以无条件申请“仅退款”了?淘宝天猫又离狗多多零元购近了一步2024-06-28 09:27:13
美国法院裁定阿里须为Squishmallows玩具侵权案答辩2023-12-28 19:59:34
小米汽车传员工3700人 雷军称小米汽车不可能卖9万92023-12-28 19:41:57
国家新闻出版署:认真研究《网络游戏管理办法(草桉徵求意见稿)》关切 实行前进一步完善2023-12-28 19:14:56
印度以打击金融犯罪为由逮捕了两名 vivo 高管2023-12-26 16:49:01
在国外微信收不到国内信息?微信和WeChat将被拆分2023-12-15 10:40:15
苹果iPhone15 系列手机发布最新消息 预计上市发布时间9月2023-08-06 23:21:02
华为将发布鸿蒙HarmonyOS4操作系统 功能五大升级支持设备清单2023-08-06 23:17:37
整治自媒体网红账号 400万粉丝网红发布擦边视频被无限期封禁2023-07-12 09:56:09
网传微信文件传输助手是真人是真的吗?微信官方回应2023-06-27 15:53:32
电信移动送手机成了“信用购”?你上了运营商的贷款套路了吗?2023-06-12 17:18:55
中国电信广东地区崩了无信号 客服回应已在核实处理2023-06-08 15:39:04
消息称小米新能源汽车价格表正讨论定价区间:双版本不同配置,高配或超 35 万元2023-03-06 12:56:03
华为因制裁被传或分拆剥离手机业务? 内部人士回应:可能性不大.2023-03-05 23:26:41
OPPO正式发布安第斯智能云,让终端更智能2023-02-24 16:02:27














