84.7k Star!Excalidraw:开源的在线白板工具,具备手绘风格和实时协作功能

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. Excalidraw 是一款开源的在线白板工具,具备手绘风格和实时协作功能。
  2. 支持多种绘图工具、便捷导出、离线可用及跨平台兼容性。
  3. 适用于远程协作、头脑风暴、产品设计和技术绘图等多个场景。

正文(附运行示例)

Excalidraw 是什么

在这里插入图片描述

Excalidraw 是一款开源的在线白板工具,拥有简洁的手绘风格和实时协作功能。Excalidraw 完全在浏览器中运行,无需安装,支持多人同时编辑同一张图,提供端到端加密。Excalidraw 的核心功能包括各种绘图工具、导出为 PNG 或 SVG 格式、离线可用及跨平台兼容性。Excalidraw 适于快速草图、头脑风暴和远程协作,特别适合产品经理、开发者和教育工作者。

Excalidraw 的主要功能

  • 手绘风格:Excalidraw 提供的图形都是手绘风格,让作品看起来更自然、有创意感。
  • 实时协作:支持多人在线实时协作,能同时在一个画布上创作,且支持端到端加密。
  • 丰富绘图工具:提供矩形、圆形、箭头、线条、自由绘制等多种绘图工具。
  • 便捷导出:支持将作品导出为 PNG、SVG 格式,或复制到剪贴板。
  • 离线可用:用 PWA(Progressive Web App)技术,在没有网络的情况下能继续使用。
  • 跨平台:在电脑和手机上访问,支持随时随地画图。
  • 无限画布:提供无限大的画布,用户自由绘制和排列图形。

Excalidraw 的技术原理

  • 前端框架:Excalidraw 用 React 框架构建前端界面,基于框架组件化和状态管理的优势。
  • 绘图引擎:Excalidraw 用自定义的绘图引擎处理图形的绘制、编辑和渲染。
  • 实时协作:基于 WebSocket 的实时通信技术,实现多人协作时的数据同步。
  • 国际化:支持多语言,基于 i18n 等国际化库实现界面的多语言切换。

如何运行 Excalidraw

安装

注意:以下指令适用于在自己的应用中集成 Excalidraw npm 包。如需本地开发,请参阅我们的开发指南。

npm install react react-dom @excalidraw/excalidraw

或使用 yarn:

yarn add react react-dom @excalidraw/excalidraw

示例代码

以下是一个简单的示例,展示了如何在 React 应用中集成 Excalidraw:

import React from "react";
import ReactDOM from "react-dom";
import { Excalidraw } from "@excalidraw/excalidraw";

function App() {
  return (
    <div style={{ height: "100vh" }}>
      <Excalidraw />
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));

代码解释

  1. 导入依赖:首先导入 React 和@excalidraw/excalidraw包。
  2. 创建组件:创建一个App组件,返回一个包含 Excalidraw 组件的div
  3. 设置高度:设置div的高度为 100vh,确保 Excalidraw 组件能够占据整个视口。
  4. 渲染组件:使用ReactDOM.render方法将App组件渲染到页面上的root元素中。

资源

  1. 项目官网:https://excalidraw.com
  2. GitHub 仓库:https://github.com/excalidraw/excalidraw
  3. 文档:https://docs.excalidraw.com
  4. Excalidraw+:https://plus.excalidraw.com
  5. VSCode 扩展:https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让Git走代理

有时候idea提交代码或者从github拉取代码&#xff0c;一直报错超时或者:Recv failure: Connection was reset,下面记录一下怎么让git走代理从而访问到github。 1.打开梯子 2.打开网络和Internet设置 3.设置代理 记住这个地址和端口 4.打开git bash终端 输入以下内容 git c…

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改&#xff0c;代码精略的写了一下。 注&#xff1a;场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅&#xff0c;自行处理。有个方法是直接在每个外面包一个DIV&#xff0c;用动态样式设置底色。 场景一、…

第4章-计划 4.3 订计划、勤跟踪、要闭环

4.3 订计划、勤跟踪、要闭环 1.制订好的第一版计划先要基线化&#xff0c;确保有据可依2.计划要监督执行&#xff0c;发现延期时要“喊出来”3.计划要赶得上变化4.资源保障是计划能够执行的依赖 坚定执行制订好的计划&#xff0c;监督执行效果&#xff0c;计划产生偏差时及时制…

在 WPF 中,如何实现数据的双向绑定?

在 WPF 中&#xff0c;数据绑定是一个非常重要的特性&#xff0c;它允许 UI 与数据源之间自动同步。双向绑定是一种常见的绑定方式&#xff0c;当数据源更新时&#xff0c;UI 会自动更新&#xff1b;同样&#xff0c;当 UI 中的元素&#xff08;如文本框&#xff09;发生改变时…

Java面向对象编程进阶之包装类

Java面向对象编程进阶之包装类 一、为什么要使用包装类二、掌握基本数据类型与包装类之间的转换1、为什么需要转换&#xff1f;2、如何转换&#xff1f; 三、String与基本数据类型、包装类之间的转换1、案例2、特别注意 一、为什么要使用包装类 为了使得基本类型的数据变量具备…

基于Spring Boot与Redis的令牌主动失效机制实现

目录 前言1. 项目结构和依赖配置1.1 项目依赖配置1.2 Redis连接配置 2. 令牌主动失效机制的实现流程2.1 登录成功后将令牌存储到Redis中2.2 使用拦截器验证令牌2.3 用户修改密码后删除旧令牌 3. Redis的配置与测试4. 可能的扩展与优化结语 前言 在现代Web系统中&#xff0c;用…

yolov8-cls的onnx与tensorrt推理

本文不生产技术,只做技术的搬运工! 前言 最近需要使用yolov8-cls进行模型分类任务,但是使用ultralytics框架去部署非常不方便,因此打算进行onnx或者tensorrt去部署,查看了很多网上的帖子,并没有发现有完整复现yolov8-cls前处理(不需要后处理)的"轮子",通过自己debug…

Acrobat Pro DC 2023(pdf免费转化word)

所在位置 通过网盘分享的文件&#xff1a;Acrobat Pro DC 2023(64bit).tar 链接: https://pan.baidu.com/s/1_m8TT1rHTtp5YnU8F0QGXQ 提取码: 1234 --来自百度网盘超级会员v4的分享 安装流程 打开安装所在位置 进入安装程序 找到安装程序 进入后点击自定义安装&#xff0c;这里…

VMware和CentOS 7.6 Linux操作系统的安装使用

1. 安装VMware 安装VMware之前&#xff0c;有些电脑是需要去BIOS里修改设置开启cpu虚拟化设备支持才能安装。如果运气不好在安装过程中安装不了的话就自行百度吧。 打开 VMware 的官网: https://www.vmware.com/ 点击 product&#xff0c;往下滑找到 see desktop hypeerviso…

手把手教你:如何从零开始实施一套OA办公系统!

很多朋友都吐槽说公司的各种各样的信息啊文件啊越积越多&#xff0c;导致管理起来越来越麻烦。早就跟大家说过&#xff0c;尤其是在提高工作效率、优化资源配置和促进信息共享方面&#xff0c;OA&#xff08;办公自动化&#xff09;系统发挥着不可替代的作用&#xff0c;早安排…

网页web无插件播放器EasyPlayer.js播放器返回错误 Incorrect response MIME type 的解决方式

在使用EasyPlayer.js播放器进行视频流播放时&#xff0c;尤其是在SpringBoot环境中部署静态资源时&#xff0c;可能会遇到“Incorrect response MIME type”的错误&#xff0c;这通常与WebAssembly&#xff08;WASM&#xff09;文件的MIME类型配置有关。 WASM是一种新的代码格式…

element-plus <el-date-picker>日期选择器踩坑!!!!

我怎么一上午踩两个坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;大声bb&#xff09; 原来的vue2老项目是这样写的 <el-form-item label"时间" prop"time"><el-date-pickerv-model"addForm.time"typ…

# 如何查看 Ubuntu 版本?

如何查看 Ubuntu 版本&#xff1f; 要查看‌Ubuntu版本&#xff0c;你可以通过以下几种方法&#xff1a; 1. 使用‌lsb_release 命令‌查看 使用 lsb_release -a 命令可以查看Ubuntu的详细版本信息&#xff0c;包括发行版ID、版本号以及版本代号。‌ ‌### 2、查看 /etc/is…

常用的生物医药专利查询数据库及网站(很全!)

生物医药专利信息检索是药物研发前期不可或缺的一步&#xff0c;通过对国内外生物医药专利网站信息查询&#xff0c;可详细了解其专利技术&#xff0c;进而有效降低药物研发过程中的风险。 目前主要使用的生物医药专利查询网站分为两大类&#xff0c;一个是免费生物医药专利查询…

第四节-OSI-网络层

数据链路层&#xff1a;二层--MAC地址精确定位 Ethernet 2&#xff1a; 报头长度&#xff1a;18B 携带的参数&#xff1a;D MAC /S MAC/TYPE(标识上层协议)/FCS 802.3 报头长度&#xff1a;26B 携带的参数&#xff1a;D MAC/S MAC/LLC(标识上层协议)/SNAP&#xff08;标识…

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…

【前端】深入浅出 - TypeScript 的详细讲解

TypeScript 是一种静态类型编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;添加了类型系统和编译时检查。TypeScript 的主要目标是提高大型项目的开发效率和可维护性。本文将详细介绍 TypeScript 的核心概念、语法、类型系统、高级特性以及最佳实践。 1. TypeScript…

查询DBA_FREE_SPACE缓慢问题

这个是一个常见的问题&#xff0c;理论上应该也算是一个bug&#xff0c;在oracle10g&#xff0c;到19c&#xff0c;我都曾经遇到过&#xff1b;今天在给两套新建的19C RAC添加监控脚本时&#xff0c;又发现了这个问题&#xff0c;在这里记录一下。 Symptoms 环境&#xff1a;…

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习&#xff0c;整理了翻译版本&#xff0c;目前翻译的还不完善&#xff0c;后续会边学习边完善。 文档用于自己快速参考&#xff0c;会持续修正&#xff0c;能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…

机器学习 ---模型评估、选择与验证(1)

目录 前言 一、为什么要有训练集与测试集 1、为什么要有训练集与测试集 2、如何划分训练集与测试集 二、欠拟合与过拟合 1、什么是欠拟合与欠拟合的原因 2、什么是过拟合与过拟合的原因 一些解决模型过拟合和欠拟合问题的常见方法&#xff1a; 解决过拟合问题&#…