美文网首页
WEB-TOOLS-04Mermaid渲染

WEB-TOOLS-04Mermaid渲染

作者: 杨强AT南京 | 来源:发表于2019-11-04 22:29 被阅读0次

  开发中常用的流程图,UML2图,甘特图等也可以使用Javascript渲染,这个就是mermaid,其渲染也提供Javascript模块mermaid。
   1. 安装;
   2. 编程模式;
   3. Vue中的使用;


  • 说明:
    • 本主题主要是说明渲染,不是专门说明mermaid语法的。

mermaid环境准备

安装

  • 安装mermaid需要安装d3模块。下面是安装脚本:
    npm install d3@^4.13.0  --save
    npm install mermaid --save
  • d3是3D可视化有名的模块。

模块文件

  • mermaid.js
mermaid的安装模块文件

mermaid编程模式

  • mermaid渲染比较单一,直接转换为Web常见的展示方式svg:

    • 包含svg的样式;
    • 包含svg标记;
  • 编程模式采用回调方式,一旦渲染成功,就调用回调函数进行后继处理:显示或者存储为文件,下面使用代码直接说明:

    1. 准备一个svg显示组件
    2. 实现一个回调函数,处理渲染的svg结果;
    3. 调用meimaid全局对象的函数render实现渲染。
      • 渲染render返回渲染结果,如果传递了回调函数,渲染结果也会传递给回调函数。

回调模式

    <body>
        <!-- 显示区域 -->
        <div id="show" style="width:300px;height:300px;">
            Hello
        </div>

    </body>
    <script>
        // 需要绘制的Mermaid图
        var graphDefinition = 'graph TB\na-->b';   
        // 渲染完成后的回调函数
        var insertSvg = function(svgCode){
            document.querySelector("#show").innerHTML = svgCode;
        };
        // 非常简单的渲染函数(第一个参数指定渲染后的svg的id)
        var graph = mermaid.render('graphDiv', graphDefinition, insertSvg);

    </script>

返回模式

    <body>
        <!-- 显示区域 -->
        <div id="show" style="width:300px;height:300px;">
            Hello
        </div>

    </body>
    <script>
        // 需要绘制的Mermaid图
        var graphDefinition = 'graph TB\na-->b';   
        // 非常简单的渲染函数(第一个参数指定渲染后的svg的id)
        var graph = mermaid.render('graphDiv', graphDefinition);
        document.querySelector("#show").innerHTML = graph;
    </script>
  • 绘制的流程图效果
简单的流程图处理效果

关于mermaid的选项设置

  • 为了显示不同的风格,可以通过选项设置风格
    • 并可以分别设置不同图形的风格
      1. 流程图
      2. 甘特图
      3. 类图与时序图(UML2.0)

        <script src="./node_modules/mermaid//dist//mermaid.js"></script>
        <!-- <script src="./mermaid.js"></script> -->
        <script>
            mermaid.initialize(
                {
                    theme: 'forest',
                    // themeCSS: '.node rect { fill: red; }',
                    logLevel: 3,
                    flowchart: { curve: 'basis' },
                    gantt: { axisFormat: '%m/%d/%Y' },
                    sequence: { actorMargin: 50 },
                    // sequenceDiagram: { actorMargin: 300 } // deprecated
                }
            );
        </script>

  • 森林主题的风格
可以使用选项设置主题风格

在Vue中使用

  • 在Vue中使用各种渲染插件,有两种使用方式:

    • 直接在html中引入模块,这是传统方式,与传统方式一样使用即可。
    • 使用require与import导入模块,这种方式需要webpack打包,麻烦要多,需要注意编译时与运行时两个方面的差别。
  • mermaid提供了require使用方式。

在Vue组件中实现转换

<script>
export default{
    name: 'mermaiddemo',
    data: () => {
        // 计算数据
        const mermaid = require('mermaid');
        var graphDefinition = '' ;
        graphDefinition += 'graph LR\n';
        graphDefinition += '流程A--选项1-->流程B\n';
        graphDefinition += '流程A--选项2-->流程C\n';
        graphDefinition += '流程B--输出1-->流程D\n';
        graphDefinition += '流程C--输出1-->流程D\n';
        graphDefinition += '流程D--结果-->流程E\n';

        const graph = mermaid.render('graphDiv', graphDefinition);
        return {
            mermaidgraph: graph,
        };
    },
};
</script>

使用Vue指令显示转换结果

<template>
    <div>
        <section id="show" v-html="mermaidgraph"></section>
    </div>
</template>
  • 完整的的Vue路由组件代码
<template>
    <div>
        <section id="show" v-html="mermaidgraph"></section>
    </div>
</template>
<script>
export default{
    name: 'mermaiddemo',
    data: () => {
        // 计算数据
        const mermaid = require('mermaid');
        var graphDefinition = '' ;
        graphDefinition += 'graph LR\n';
        graphDefinition += '流程A--选项1-->流程B\n';
        graphDefinition += '流程A--选项2-->流程C\n';
        graphDefinition += '流程B--输出1-->流程D\n';
        graphDefinition += '流程C--输出1-->流程D\n';
        graphDefinition += '流程D--结果-->流程E\n';

        const graph = mermaid.render('graphDiv', graphDefinition);
        return {
            mermaidgraph: graph,
        };
    },
};
</script>
<style>
</style>

  • 运行效果如下:
Vue的POI框架的使用效果
  • 注意

    • 由于MathJax与Mermaid采用独立的样式,容易被全局样式影响,所以对样式的规范显得特别重要。
  • Mermaid也提供对整个页面的自动处理

<!doctype html>
<html>
<head>
    <title>甘特图</title>
    <meta charset="utf-8">
    <script src="./node_modules/mermaid//dist//mermaid.js"></script>
</head>
<body>

    <div class="mermaid">
        gantt
        title 计划甘特图
        dateFormat  YYYY-MM-DD
        section 第一阶段
        任务一     : a1, 2019-07-18, 20d
        任务二     : after a1  , 10d
        section 第二阶段
        任务三     : 2019-08-20, 12d
        任务四     : 24d
  </div>
</body>

</html>
  • 效果
直接页面中使用的甘特图效果
  • 注意:
    • 其实还有mermaid-loader,可以把mermaid作为组件处理。

相关文章

  • WEB-TOOLS-04Mermaid渲染

      开发中常用的流程图,UML2图,甘特图等也可以使用Javascript渲染,这个就是mermaid,其渲染也提...

  • Shader-更复杂的光照-渲染路径

    渲染路径 前向渲染路径、延迟渲染路径和顶点照明渲染路径 1.前向渲染路径原理 前向渲染需要渲染该对象的渲染图元,并...

  • GPU & OpenGL相关 & 状态机 2022-06-15

    渲染分离线渲染(离线烘焙) 和 实时渲染。 实时渲染的技术实现分 普通渲染 和 光线追踪算法渲染https://w...

  • dot模板引擎

    基本模板 for 循环渲染 数组渲染 条件渲染

  • 什么是离屏渲染?

    渲染又分为离屏渲染与在屏渲染 ·On-Screen Rendering 意为当前屏幕渲染,指的是GPU的渲染操作是...

  • 图层性能-离屏渲染、光栅化等

    一.离屏渲染 1.在屏渲染、离屏渲染: On-Screen Rendering/在屏渲染:在屏渲染:指的是GPU的...

  • 学习并实现react (2)

    组件列表渲染场景 DOM复用 react 的重点在于首次渲染和更新渲染,现在考虑更新渲染如何复用DOM 让渲染更有...

  • Thearender2渲染器学习笔记之十五

    【前言】 本篇研究THEA的分层渲染技术。分层渲染也有叫分通道渲染技术,有的如VRAY渲染器也叫渲染元素。...

  • three.js基础

    1.三大组建 2.渲染器renderer 3.场景 4.渲染器 5.渲染循环 渲染有两种方式:实时渲染和离线渲染 ...

  • iOS 关于离屏渲染 Off-Screen Rendering

    1. 什么是离屏渲染 三种不同的渲染方式:屏幕渲染、离屏渲染和CPU渲染。屏幕渲染,在用于显示的屏幕缓冲区中进行,...

网友评论

      本文标题:WEB-TOOLS-04Mermaid渲染

      本文链接:https://www.haomeiwen.com/subject/rtejbctx.html