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

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

Excalidraw概述

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

功能特点

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

    使用场景

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

VUE集成

tips:官方文档 https://docs.excalidraw.com/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天前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
2月前
|
传感器 监控 搜索推荐
智能服装:集成健康监测功能的纺织品——未来穿戴科技的新篇章
【10月更文挑战第7天】智能服装作为穿戴科技的重要分支,正以其独特的技术优势和广泛的应用前景,成为未来科技发展的亮点之一。它不仅改变了我们对服装的传统认知,更将健康监测、运动训练、医疗康复等功能融为一体,为我们的生活带来了更多的便利和可能。随着技术的不断进步和市场的日益成熟,我们有理由相信,智能服装将成为未来穿戴科技的新篇章,引领我们走向更加健康、智能、可持续的生活方式。
|
2月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
102 1
|
1天前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
34 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
1月前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
42 2
|
1月前
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。
|
1月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
43 1
|
2月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
2月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
422 11
|
2月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用