从嵌入式到前端的探索之旅,分享 5 个开源 Web 小工具

我是一名嵌入式开发工程师,在软硬件开发领域摸爬滚打多年。从单片机到 ARM,从裸机编程到 Linux,从硬件调试到驱动开发,从 RTOS 到图形界面,我在嵌入式世界里积累了不少经验。

但当我想要开发互联网产品时,我发现了一个全新的世界 ------ Web 开发。那些在嵌入式领域习以为常的概念,在 Web 开发中变得陌生:DOM 操作、事件处理、CSS 布局、异步编程...... 一切都让我感到既兴奋又困惑。

学习之路

于是,大概五年前,我决定从零开始学习 Web 前端开发。这不是一次简单的技术栈切换,而是一次思维方式的转变:

  • 从 C 语言到 JavaScript:从静态类型到动态类型,从编译时到运行时;
  • 从硬件抽象到 DOM 操作:从寄存器操作到浏览器 API;
  • 从线程管理到异步编程:从轮询到事件驱动;
  • 从固定布局到响应式设计:从像素级精确到弹性布局。

在这个过程中,我通过 Head First 系列书籍来学习。在完成了示例项目后,我发现还是意犹未尽,想着与其只看教程,不如动手做点有用的东西。于是,我根据自己的需求开发了几个 Web 在线小工具,每完成一个都有一种神奇的成就感。

最近,我重新整理了 5 个小工具的代码到 GitHub,并且通过 GitHub Pages 的方式提供在线访问,欢迎你来使用或改进~

项目介绍

① 水印工具(Watermarking)

我们平常租房子、办业务,需要提交身份证照片,为了避免身份证照片被滥用,通常需要打个水印。但是市面上的工具,往往需要下载 App,还要将照片上传到别人的服务器,既繁琐又不安全。因此我做了一个简单的 Web 工具,基于浏览器本地 API,实现为图片添加文字水印,并支持自定义水印颜色、大小、角度、间距、透明度。

特别说明:虽然这个 Web 工具需要用网络浏览器打开,但使用过程中不需要上传图片,所有操作均在本地进行。

学习要点

  • Canvas API 的使用
  • 文件上传和处理
  • 图片下载功能

GitHub 地址:https://github.com/luhuadong/watermarking

在线使用:https://luhuadong.github.io/watermarking/

② 颜色拾取工具(Color Picker)

做前端开发的朋友都知道,页面配色是一项很重要、很讲究品味的工作。我们常常需要参考别人的设计,从屏幕上提取一些颜色值。因此,我想做一个可以从屏幕任意位置拾取颜色值的工具,并且支持 RGB、HEX、HSL 格式,带放大镜效果。

不过呢,由于浏览器安全限制,这个网页版的 Color Picker 拾取颜色时无法跳出页面,因此我们尝试做了一个屏幕到页面的映射,但是效果不太好。因此,后面我又开发了一个浏览器插件 GetColor,这样就可以跳出浏览器页面,真正做到提取屏幕任意位置的颜色啦!

学习要点

  • Screen Capture API(getDisplayMedia
  • Canvas 像素操作
  • 坐标转换和计算
  • 触摸事件处理

GitHub 地址:https://github.com/luhuadong/color-picker

在线使用:https://luhuadong.github.io/color-picker/

③ 图片对比工具(Image Compare)

在工作和生活中,有时候我们需要同时对比几张图片同一位置的细微区别,挑选出最好的一张图片。因此我做了一个网页工具,可以同时对比 2-4 张图片,支持同步缩放、平移、移动操作。同时也支持触摸事件,因此在手机、平板等移动端也可以使用哦!

学习要点

  • 多图片同步操作
  • 触摸手势识别(捏合缩放、拖拽)
  • 响应式布局设计
  • 事件委托和状态管理

GitHub 地址:https://github.com/luhuadong/image-compare

在线使用:https://luhuadong.github.io/image-compare/

④ 时间工具(Timestamp)

对于普通人来讲,时间戳的概念有点陌生。不过,对于软件工程师来说,时间戳是一个经常接触的东西,例如在工作中我们经常需要观察、分析带时间戳的日志信息。因此,我做了一个小工具,支持时间戳转换、多时区显示、倒计时、年度进度等时间相关功能。界面设计使用 Kindle 电纸书风格,看起来干净清爽,就像时间这位老朋友一样,历久弥新。

学习要点

  • Luxon 日期时间库的使用
  • 时区处理
  • 复杂的状态管理
  • 动态 UI 更新

GitHub 地址:https://github.com/luhuadong/timestamp

在线使用:https://luhuadong.github.io/timestamp/

⑤ 计算器(Calculator)

现在的手机和电脑都自带一个计算器,再做一个计算器似乎有点多余,不过我还是做了一个网页版的计算器。后续可能会增加一些功能,让它成为一个超级计算器。所以它目前还是一个学习项目,拥有 iPhone 计算器的设计风格,支持基本运算、历史记录、表达式显示等基本功能。欢迎你和我一起完善它~

学习要点

  • 状态机设计
  • 用户交互逻辑
  • CSS 动画和过渡效果
  • 历史记录管理

GitHub 地址:https://github.com/luhuadong/calculator

在线使用:https://luhuadong.github.io/calculator/

技术栈

上述五个工具都采用纯前端技术实现:

  • HTML5:语义化标签,结构清晰
  • CSS3:现代布局(Flexbox、Grid)、动画效果
  • JavaScript (ES6+):原生 JS,无框架依赖
  • 响应式设计:适配桌面和移动设备

由于没有任何框架依赖,因此你在本地直接打开 HTML 也可以使用。

设计理念

每个工具都遵循简洁实用的原则:

  • Kindle 风格:部分工具采用类似 Kindle 电纸书的设计风格,平面化、高对比、黑白灰
  • 暗黑模式:部分工具支持暗黑主题,保护眼睛
  • 无依赖:纯原生实现,无需安装任何依赖
  • 即开即用:打开 HTML 文件即可使用

开源协议

所有项目均采用 MIT License,你可以自由使用、修改、分发。

学习心得

从嵌入式到 Web 开发,我最大的感受是:

  1. 思维方式不同:嵌入式更注重资源控制和实时性,Web 开发更注重用户体验和交互;
  2. 调试方式不同:从示波器到浏览器开发者工具;
  3. 部署方式不同:从烧录固件到部署到服务器;
  4. 但核心逻辑相通:无论是哪种开发,都需要清晰的逻辑思维和问题解决能力。

最后,感谢所有在我学习路上给予帮助的教程、文档和开源项目。这些工具虽然简单,但每一个都凝聚了我的学习和思考。如果你也是从其他领域转向学习前端开发,或者对这些工具有任何建议,欢迎交流!

相关推荐
代码猎人2 分钟前
substring和substr有什么区别
前端
pimkle2 分钟前
visactor vTable 在移动端支持 ellipsis 气泡
前端
donecoding2 分钟前
告别 scrollIntoView 的“越级滚动”:一行代码解决横向滚动问题
前端·javascript
0__O2 分钟前
如何在 monaco 中实现自定义语言的高亮
前端·javascript·编程语言
Jasmine_llq4 分钟前
《P3200 [HNOI2009] 有趣的数列》
java·前端·算法·线性筛法(欧拉筛)·快速幂算法(二进制幂)·勒让德定理(质因子次数统计)·组合数的质因子分解取模法
呆头鸭L5 分钟前
快速上手Electron
前端·javascript·electron
Aliex_git9 分钟前
性能指标笔记
前端·笔记·性能优化
秋天的一阵风9 分钟前
🌟 藏在 Vue3 源码里的 “二进制艺术”:位运算如何让代码又快又省内存?
前端·vue.js·面试
TTGGGFF9 分钟前
报错解决:git clone git@github.com: Permission denied (publickey)权限拒绝问题
git·github
松涛和鸣10 分钟前
48、MQTT 3.1.1
linux·前端·网络·数据库·tcp/ip·html