一个类似 Gamma.app 的拖拽式富文本编辑器,基于 Vue 3.4、Tiptap 2.11.7 和 Vite 构建。 方便快速理解 gamma 无限画布基础实现原理。
- 拖拽组件:从侧边栏拖拽各种组件到编辑器
- 富文本编辑:基于 Tiptap 的强大编辑功能
- 丰富组件:支持标题、段落、图片、表格、列表、引用等
- 精确放置:拖拽时显示放置指示器
- 实时预览:所见即所得的编辑体验
- Heading - 标题组件
- Paragraph - 段落组件
- Image - 图片组件
- Quote - 引用块
- Callout - 提示框
- Divider - 分隔线
npm installnpm run dev访问 http://localhost:3001 查看应用(端口可能因占用而变化)
- 打开浏览器访问本地服务器
- 从左侧侧边栏拖拽组件到编辑器
- 点击内容进行编辑
- 使用顶部工具栏格式化文本
npm run buildsrc/
├── components/
│ ├── Editor.vue # 主编辑器组件
│ └── Sidebar.vue # 侧边栏组件
├── utils/
│ └── componentTemplates.js # 组件模板定义
├── App.vue # 主应用组件
├── main.js # 应用入口
└── style.css # 全局样式
- 从左侧侧边栏选择需要的组件
- 拖拽组件到编辑器中的目标位置
- 释放鼠标完成插入
- 使用顶部工具栏进行文本格式化
- 直接点击内容进行编辑
- 支持标准的富文本编辑操作
在 src/utils/componentTemplates.js 中添加新的组件模板:
myComponent: {
name: 'My Component',
icon: 'MY',
generate: (param1, param2) => `<div>Custom content</div>`
}- Vue 3.4 - 渐进式 JavaScript 框架
- Tiptap 2.11.7 - 现代富文本编辑器框架
- Vite - 下一代前端构建工具
- 在
componentTemplates.js中定义新组件 - 更新
getAvailableComponents()函数 - 确保组件模板返回有效的 HTML
所有样式都在 src/style.css 中定义,支持自定义主题。
MIT License