前端组件库—— Vditor 知识点大全(四)

简介: 教程来源 http://oplhc.cn Vditor 是一款功能强大的浏览器端 Markdown 编辑器,支持图片拖拽/粘贴上传、Mermaid/ECharts 图表、KaTeX 数学公式、离线部署及实时保存等高级特性,兼容 Vue/React,高度可定制。

六、上传功能配置

6.1 图片上传配置
Vditor 支持图片拖拽、粘贴和工具栏按钮上传,可配置上传接口。

const vditor = new Vditor('vditor', {
    upload: {
        url: '/api/upload',           // 上传接口地址
        fieldName: 'file',            // 文件字段名
        accept: 'image/*',            // 接受的文件类型
        multiple: true,               // 是否支持多文件上传
        linkToImgUrl: '/api/fetch',   // URL 转图片地址
        token: 'your-upload-token',   // 鉴权 token
        withCredentials: true,        // 是否携带 cookie

        // 文件重命名
        filename: (name) => {
            return name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5\.)]/g, '')
                .replace(/[\\/:*?"<>|]/g, '');
        },

        // 上传前校验
        validate: (files) => {
            const maxSize = 5 * 1024 * 1024;  // 5MB
            for (let file of files) {
                if (file.size > maxSize) {
                    alert('文件大小不能超过 5MB');
                    return false;
                }
            }
            return true;
        },

        // 格式化上传响应
        format: (files, responseText) => {
            const res = JSON.parse(responseText);
            const result = {
                code: 0,
                data: {
                    errFiles: [],
                    succMap: {}
                }
            };

            for (let file of files) {
                if (res.code === 0) {
                    result.data.succMap[file.name] = res.data.url;
                } else {
                    result.data.errFiles.push(file.name);
                }
            }
            return JSON.stringify(result);
        },

        // 上传进度回调
        progress: (percent) => {
            console.log(`上传进度: ${percent}%`);
        },

        // 上传成功回调
        success: (responseText) => {
            console.log('上传成功', responseText);
        },

        // 上传失败回调
        error: (error) => {
            console.error('上传失败', error);
        }
    }
});

6.2 上传接口响应格式
上传接口需要返回特定的 JSON 格式:

{
    "code": 0,
    "data": {
        "errFiles": ["failed.jpg"],
        "succMap": {
            "success.jpg": "https://example.com/images/success.jpg"
        }
    }
}

七、高级功能

7.1 图表与流程图支持
Vditor 通过集成 Mermaid、ECharts 等引擎,支持多种图表渲染。
https://hllft.cn
Mermaid 流程图示例:

```mermaid
graph TD
    A[开始] --> B{判断}
    B -->|是| C[执行]
    B -->|否| D[结束]

ECharts 图表示例:

{
    xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
    yAxis: { type: 'value' },
    series: [{ type: 'line', data: [120, 200, 150] }]
}

7.2 数学公式渲染

行内公式:$E = mc^2$

块级公式:
$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$

配置数学公式支持:

const vditor = new Vditor('vditor', {
    math: {
        engine: 'KaTeX',   // 或 'MathJax'
        inlineDigit: true
    }
});

7.3 Markdown 预览与渲染
如果只需要展示 Markdown 内容而不需要编辑功能,可以使用 Vditor.preview 方法。

import VditorPreview from 'vditor/dist/method.min';

// 方式一:直接预览
VditorPreview.preview(document.getElementById('preview'), markdownContent, {
    theme: {
        current: 'light'
    },
    hljs: {
        style: 'github',
        lineNumber: true
    },
    math: {
        engine: 'KaTeX'
    }
});
// 方式二:使用 md2html 转换
import { md2html } from 'vditor';

const html = await md2html(markdownText, {
    math: { engine: 'KaTeX' },
    highlight: true
});
document.getElementById('content').innerHTML = html;

7.4 内容转换与图片处理
通过 transform 回调可以在渲染前对 HTML 进行自定义处理:

VditorPreview.preview(document.getElementById('preview'), markdown, {
    transform: (html) => {
        // 图片居中并添加题注
        return html.replace(
            /<img\s+[^>]*src="([^"]+)"\s*alt="([^"]*)"[^>]*>/g,
            (match, src, alt) => {
                return `
                    <div style="text-align: center;">
                        <img src="${src}" alt="${alt}" style="max-width: 100%;">
                        <p class="image-caption">${alt}</p>
                    </div>
                `;
            }
        );
    }
});

7.5 离线使用配置
在需要离线使用的场景中(如内网环境),需要配置 CDN 为空并自托管资源文件。

import Vditor from 'vditor';
import 'vditor/dist/index.css';

// 复制 node_modules/vditor/dist 到 public 目录

const vditor = new Vditor('vditor', {
    cdn: '',  // 关键:设置为空字符串,使用本地资源
    height: 500,
    mode: 'ir'
});

八、性能优化与最佳实践

8.1 资源优化
按需加载:Vditor 默认会加载所有功能模块,可以通过配置只加载需要的模块。在生产环境中,建议将 node_modules/vditor/dist 复制到静态资源目录并配置 CDN 为空后,删除不需要的组件源码(如流程图渲染等)以减小打包体积。

// vite.config.js 中的优化配置
import { defineConfig } from 'vite';

export default defineConfig({
    build: {
        rollupOptions: {
            output: {
                manualChunks: {
                    vditor: ['vditor']
                }
            }
        }
    },
    server: {
        fs: {
            allow: ['..']
        }
    }
});

懒加载编辑器:

<template>
    <div v-if="editorVisible" id="vditor-container"></div>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const editorVisible = ref(false);

const loadEditor = async () => {
    const Vditor = (await import('vditor')).default;
    await import('vditor/dist/index.css');

    new Vditor('vditor-container', {
        height: 500
    });
};

onMounted(() => {
    // 延迟加载编辑器
    setTimeout(() => {
        editorVisible.value = true;
        loadEditor();
    }, 1000);
});
</script>

8.2 实时保存与防抖

let saveTimer = null;

const vditor = new Vditor('vditor', {
    input: (value) => {
        // 防抖保存,避免频繁请求
        if (saveTimer) clearTimeout(saveTimer);
        saveTimer = setTimeout(() => {
            localStorage.setItem('document-content', value);
            console.log('草稿已保存');
        }, 1000);
    },
    blur: (value) => {
        // 失焦时立即保存
        saveToBackend(value);
    }
});

Vditor 以其三种编辑模式、丰富的扩展功能、多框架支持和高度可定制的特性,成为浏览器端 Markdown 编辑器的优秀选择。

相关文章
|
12天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23475 11
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
16天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
5236 19
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
17天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
6253 15
|
6天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
1306 2
|
5天前
|
前端开发 API 内存技术
对比claude code等编程cli工具与deepseek v4的适配情况
DeepSeek V4发布后,多家编程工具因未适配其强制要求的`reasoning_content`字段而报错。本文对比Claude Code、GitHub Copilot、Langcli、OpenCode及DeepSeek-TUI等主流工具的兼容性:Claude Code需按官方方式配置;Langcli表现最佳,开箱即用且无报错;Copilot与OpenCode暂未修复问题;DeepSeek-TUI尚处早期阶段。
949 2
对比claude code等编程cli工具与deepseek v4的适配情况
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
26208 65
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)