基于React和TypeScript的开源白板项目(Github项目分享)

news2024/11/24 14:02:11

3a3e7d3de1c0ea1509e50ab1f43217da.jpeg

在学习前端开发的过程中,有时候我们需要一些有趣的项目来提升我们的技能。今天我要给大家介绍的是一个非常酷的项目——NinjaSketch,这是一个用React和TypeScript构建的简易白板工具。这个项目使用了Rough.js来实现手绘风格的效果。尽管这个应用不是响应式的,但它的功能非常强大,适合用来练习和学习。

开源地址

https://github.com/mirayatech/NinjaSketch

使用的技术

  • Vite:一个快速的构建工具

  • React.js:用于构建用户界面的JavaScript库

  • TypeScript:JavaScript的超集,提供了静态类型检查

  • Rough.js:用于创建手绘风格的图形

  • CSS:用于样式设计

  • Vitest:一个用于单元测试的框架

  • Cypress:用于端到端测试的框架

  • Testing Library:一个用于测试React组件的库

NinjaSketch的功能

在NinjaSketch中,你可以进行以下操作:

选择工具

你可以选择铅笔、直线、矩形和文本工具,开始你的创作之旅。

绘制和移动

在画布上点击并拖动即可绘制图形。要移动某个元素,只需选择它并将其拖动到新的位置。你也可以通过拖动角落来调整元素的大小,但这个功能目前仅适用于矩形和直线。

编辑文本

点击画布并开始输入,即可在绘图中添加文本。你也可以编辑现有的文本内容。

缩放

使用Ctrl + 滚动或点击按钮可以放大和缩小画布,方便查看细节或全貌。

平移

按住空格键并拖动,或使用中键按钮来移动画布。

快捷键

使用以下快捷键可以提高你的工作效率:

  • 画布导航:按空格键并拖动,或使用中键按钮。

  • 撤销:Ctrl + Z。

  • 重做:Ctrl + Y或Ctrl + Shift + Z。

  • 放大:Ctrl + 加号。

  • 缩小:Ctrl + 减号。

如何安装

要在本地环境中运行该项目,请按照以下步骤操作:

  • 克隆这个仓库到你的本地机器。

  • 在项目目录中运行npm install或yarn来安装所需的依赖项。

  • 运行npm run start或yarn start来启动项目。

  • 在浏览器中打开http://localhost:5173(或控制台显示的地址)来查看应用。

延伸阅读:作者的开发过程

项目开始时,我使用Rough.js渲染了一个画布,作为所有绘图的基础。然后,我专注于在画布上绘制图形,允许用户创建线条、矩形等形状。

接下来,我确保用户可以移动元素,这对于调整绘图非常重要。之后,我添加了调整元素大小的功能,以便用户更好地控制图形的形状。

为了让用户可以修正错误,我实现了撤销和重做功能。我还添加了自由绘图工具,使绘图体验更加自然,以及文本工具,用于在画布上添加标签或注释。

为了便于导航较大的绘图,我加入了平移和缩放工具。在所有功能实现后,我设计了整个用户界面,使其更加用户友好和吸引人。

最后,我使用Cypress和Testing Library进行了测试,确保绘图和操作文本、线条、矩形以及自由绘图的功能都正常工作。

在整个开发过程中,我记录了所学到的知识和实现功能的过程。这种记录不仅帮助我更好地理解了所构建的内容,还让我意识到,通过回顾和记录,我们可以更全面地理解所学的知识。这是一个在学习新事物时值得遵循的好习惯。

📚 学到的知识

在这个项目中,我学到了很多重要的技能,并对一些复杂的概念有了更深入的理解,提升了我的逻辑思维能力。

🧠 useHistory Hook

逻辑思维:创建useHistory钩子教会了我如何管理保存、撤销和重做操作,需要深入理解如何跟踪变化和规划用户操作。

📏 坐标和测量

精度:我在处理形状和点时变得更加精准,比如确定一个点是否在形状内部,这需要仔细的测量。数学技能:我使用数学函数来确保所有元素都被正确放置,并计算距离。

🎨 发现Rough.js

新工具:我发现了Rough.js,这个工具可以让我创建出手绘风格的图形,这对我来说是一个新的且令人兴奋的工具。

🔍 深入研究函数

复杂函数:我花时间理解了getSvgPathFromStroke函数,它可以将绘图动作转换为平滑的路径。

✏️ 管理点和绘图

处理点:我学会了如何收集和使用绘图中的点,这涉及到理解和管理数据,以反映用户的操作。

🎣 React Hooks和渲染

新知识:我学习了useLayoutEffect,这个钩子可以确保在屏幕更新前完成某些变化,对于某些绘图功能非常有用。

🎡 高级事件处理

用户交互:我处理了wheel事件监听器,添加了缩放和平移功能,使应用更加互动和用户友好。

📈 总体成长

这个项目的每一个部分都帮助我更好地理解了如何构建应用程序、管理复杂信息和改善用户体验。这不仅仅是制作一个工具,更是解决问题、学习新知识和提升自己技能的过程。

💭 如何改进

  • 增加更多颜色选项。

  • 添加更多工具,比如圆形、橡皮擦等。

  • 增加更多形状,比如三角形、星形等。

  • 增加更多快捷键,提高操作效率。

  • 增加更多主题,比如暗黑模式、亮色模式等。

  • 增加更多文本选项,比如字体大小、字体颜色等。

  • 在某些地方使用类型定义来代替any类型,以提高代码的可维护性。

结束

通过这个项目,希望大家能够更好地理解 React和 TypeScript 的结合使用,并在自己的开发之路上不断进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1898447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识图谱和 LLM:多跳问答

检索增强生成(RAG)应用程序通过将外部来源的数据集成到 LLM 中,擅长回答简单的问题。但他们很难回答涉及将相关信息之间的点连接起来的多部分问题。这是因为 RAG 应用程序需要一个数据库,该数据库旨在存储数据,以便轻松…

html+js+css在线倒计时

代码在图片后面 点赞加关注 谢谢大佬照顾&#x1f61c; 图例 时间到前 时间到后 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width,…

Docker:三、安装nginx与tomcat

&#x1f341;安装常见服务 &#x1f332;安装nginx &#x1f9ca;1、搜索镜像 Ⅰ.hub docker上查询&#xff1a;https://hub.docker.com/_/nginx Ⅱ. 命令查询&#xff1a;docker search nginx &#x1f9ca;2、下载镜像 命令&#xff1a;docker pull nginx &#x1f9c…

google 邮件信息收集

主要介绍通过google和fofax对目标进行邮件信息收集 chrome插件 email-whatsapp-extractor link-klipper-extract-all bulk-url-opener-extension email-whatsapp-extractor 使用正则表达式&#xff0c;获取访问页面内所有的email邮箱和whatsapp号码&#xff0c;以表格的形式导…

vulnhub--IMF

环境 攻击机&#xff1a;192.168.96.4 靶机&#xff1a;ip未知 主机探测 确定靶机ip为32的主机 端口扫描 访问80端口 外围打点 在contact.php页面源码中找到了flag1 之后没啥突破 但查看网络后发现contact.php页面请求的三个js文件的文件名很有特点&#xff0c;猜测是base64编码…

奥比中光astra_pro相机使用记录

一、信息获取 1、官网 用于了解产品信息 http://www.orbbec.com.cn/sys/37.html 2、开发者社区 咨询问题下载开发部https://developer.orbbec.com.cn/ 二 、windowvs19 1、相机型号 orbbec_astro_pro 根据对应的型号找到需要的包工具 踩坑1&#xff0c;因为这个相机型号…

C++ UTF-8编解码

icu 编解码数据&#xff1a; extern const UConverterSharedData _MBCSData, _Latin1Data, _UTF8Data, _UTF16BEData, _UTF16LEData, _UTF32BEData, _UTF32LEData, _ISO2022Data, _LMBCSData1,_LMBCSData2, _LMBCSData3, _LMBCSData4, _LMBCSData5, _LMBCSDat…

数字信号处理及MATLAB仿真(2)——离散系统

上回书说到如何来编写一些简单的离散时间序列&#xff0c;今天咱们就来谈谈一些关于常系数差分方程的操作吧。 说到这里咱们对于常系数差分方程可能最关心的就是怎么去求解了。 其中最关键的部分就是filter函数&#xff0c;可以用来计算系统在输入信号为x的输出信号y。大家学过…

Hilbert编码 思路和scala 代码

需求&#xff1a; 使用Hilbert 曲线对遥感影像瓦片数据进行编码&#xff0c;获取某个区域的编码值即可 Hilbert 曲线编码方式 思路 大致可以对四个方向的数据进行归类 左下左上右上右下 这个也对应着编码的顺序 思考在不同Hilbert深度&#xff08;阶&#xff09;情况下的…

【重磅】万能模型-直接能换迪丽热巴的模型

万能模型&#xff0c;顾名思义&#xff0c;不用重新训练src&#xff0c;直接可以用的模型&#xff0c;适应大部分原视频脸 模型用法和正常模型一样&#xff0c;但可以跳过训练阶段&#xff01;直接到合成阶段使用该模型 本模型没有做Xseg&#xff0c;对遮挡过多的画面不会自动适…

掌握 Postman 脚本:入门指南

在探索 API 测试自动化环墁下&#xff0c;Postman 脚本显现其强大功能和灵活性&#xff0c;它不仅仅是 API 测试的工具&#xff0c;更是一个综合性的自动化平台。 Postman 脚本简介 Postman 允许用户在 API 请求生命周期中运行 JavaScript 脚本&#xff0c;这些脚本分为以下三…

FineBI在线学习资源-数据处理

FineBI在线学习资源汇总&#xff1a; 学习资源 视频课程 帮助文档 问答 数据处理学习文档&#xff1a; 相关资料&#xff1a; 故事背景概述-https://help.fanruan.com/finebi6.0/doc-view-1789.html 基础表处理-https://help.fanruan.com/finebi6.0/doc-view-1791.html …

联合概率密度函数

目录 1. 什么是概率密度由联合概率密度求概率参考链接 1. 什么是概率密度 概率密度到底在表达什么&#xff1f; 外卖在20-40分钟内送达的概率 随机变量落在[20,40]之间的概率。下图中&#xff0c;对总面积做规范化处理&#xff0c;令总面积1&#xff0c; f ( x ) f(x) f(x)则成…

使用中国大陆镜像源安装最新版的 docker Deamon

在一个智算项目交付过程中&#xff0c;出现了新建集群中的全部 docker server V19 进程消失、仅剩 docker server 的 unix-socket 存活的现象。 为了验证是否是BD产品研发提供的产品deploy语句缺陷&#xff0c;需要在本地环境上部署一个简单的 docker Deamon 环境。尴尬的是&a…

SD16S1Y 符合GB2312标准16X16点阵汉字库芯片IC

一般概述 SD16S1Y是一款内含16x16点阵的汉字库芯片&#xff0c;支持GB2312国标简体汉字(含有国家信标委 合法授权)、ASCII字符。排列格式为竖置横排。用户通过字符内码&#xff0c;利用本手册提供的方法计算出 该字符点阵在芯片中的地址&#xff0c;可从该地址连续读出字…

【JavaWeb程序设计】JSP编程

目录 一、编写JSP页面&#xff0c;在界面上显示1-9&#xff0c;9个链接&#xff0c;单击每个链接&#xff0c;能够在另一个页面打印该数字的平方。 1. 运行截图 2. 第一个jsp页面&#xff08;index.jsp&#xff09; 3. 第二个jsp页面&#xff08;square.jsp&#xff09; 二…

信创-办公软件应用工程师认证

随着国家对信息技术自主创新的战略重视程度不断提升&#xff0c;信创产业迎来前所未有的发展机遇。未来几年内&#xff0c;信创产业将呈现市场规模扩大、技术创新加速、产业链完善和国产化替代加速的趋势。信创人才培养对于推动产业发展具有重要意义。应加强高校教育、建立人才…

卫星网络——Walker星座简单介绍

一、星座构型介绍 近年来&#xff0c;随着卫星应用领的不断拓展&#xff0c;许多任务已经无法单纯依靠单颗卫星来完成。与单个卫星相比&#xff0c;卫星星座的覆盖范围显著增加&#xff0c;合理的星座构型可以使其达到全球连续覆盖或全球多重连续覆盖&#xff0c;这样的特性使得…

SpringBoot的在线教育平台-计算机毕业设计源码68562

摘要 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;在线教育已成为教育领域的重要趋势。为了满足广大学习者对于灵活、高效学习方式的需求&#xff0c;基于Spring Boot的在线教育平台应运而生。Spring Boot以其快速开发、简便部署以及良好的可扩展性&#xff0c…

CVPR2024自动驾驶轨迹预测方向的论文整理

2024年自动驾驶轨迹预测方向的论文汇总 1、Producing and Leveraging Online Map Uncertainty in Trajectory Prediction 论文地址&#xff1a;https://arxiv.org/pdf/2403.16439 提出针对在线地图不确定性带给轨迹预测的影响对应的解决方案。 在轨迹预测中&#xff0c;利用在…