1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huoyo-metricflow

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

MetricFlow.js

别拦我,我要支持作者


MetricFlow — это библиотека JavaScript для создания перетаскиваемых, гибко определяемых диаграмм процессов, сетевых диаграмм и демонстраций карт знаний.

Версия Python доступна по адресу ndraw.

Примечание автора: этот проект был создан в ответ на запрос пользователя из соседнего KoTime. Я думал, что им нравится мой побочный продукт KoTime, но оказалось, что они просто хотели BB-пудру с его лица. Не знаю, грустить или радоваться, ведь всё это написал я!

Кроме того, я бэкенд-разработчик и не занимаюсь фронтендом. Если у вас есть какие-либо проблемы, пожалуйста, сообщите мне (не ругайте меня), а если вам нравится этот проект, вы можете поставить мне звёздочку, чтобы я продолжал улучшать его!

Демонстрация

Быстрый старт

0. Импорт

  • Извлечение из исходного кода:
    • Скачайте выпускную версию с сайта.
    • 
      
    <script src="metricflow.js"></script>

* **Установка через npm:**
    >npm install metricflow

    ```html
    let MetricFlow = require("metricflow")

1. Создание холста

Создайте холст, просто определив элемент div и указав ширину и высоту.

<div id="graph" height="700px" width="1100px" ></div>

2. Создание узлов

/*Создание диаграммы на холсте*/
let metricFlow = MetricFlow("graph")
/*Определение данных узла*/
let nodeData= {
    "id":"primaryKey",//id должен быть уникальным в глобальном масштабе, иначе будет перезаписан
    "title":{'name':"Статистика времени выполнения"},
    "data":[
       {'name':'Метод: IndexController#method1'},
       {'name':'Среднее время: 0,333 мс'},
     ]
};
/*Создание узла в координатах (20,200)*/
let node1 = metricFlow.createNode(nodeData,10,200);
/*Или напрямую определите позицию x и y в nodeData, затем*/
/*metricFlow.createNode(nodeData);*/

Пример создания узла demo1.html

Описание изображения

3. Создание связей

let metricFlow = MetricFlow("graph")
let node1Data= {
    "x":10,
    "y":200,
    "id":"node1",
    "title":{'name':"Статистика времени выполнения"},
    "data":[
       {'name':'Метод: IndexController#method1'},
       {'name':'Среднее время: 0,333 мс'},
     ]
};
let node1 = metricFlow.createNode(node1Data);

let node2Data= {
    "x":300,
    "y":200,
    "id":"node2",
    "title":{'name':"Статистика времени выполнения"},
    "data":[
       {'name':'Метод: IndexController#method1'},
       {'name':'Среднее время: 0,333 мс'},
     ]
};
let node2 = metricFlow.createNode(node2Data);
/*Соедините два узла. Начальная точка соединения не имеет значения, она будет автоматически определена. Например, если целевой узел находится ниже начального узла, соединение начинается от нижней части начального узла и заканчивается в верхней части целевого узла.*/
metricFlow.createLink(node1,node2);

Или непосредственно укажите атрибут from в конечном узле, без необходимости вызова metricFlow.createLink(node1,node2);

let metricFlow = MetricFlow("graph")
let node1Data= {
    "x":10,
    "y":200,
    "id":"node1",
    "title":{'name':"Статистика времени выполнения"},
    "data":[]
};
let node1 = metricFlow.createNode(node1Data);

let node2Data= {
    "x":300,
    "y":200,
    "id":"node2",
    "from":"node1",//значение from может быть строкой или массивом
    "title":{'name':"Статистика времени выполнения"},
    "data":[]
};
let node2 = metricFlow.createNode(node2Data);

Создание связи между двумя узлами — пример demo2.html Описание изображения

Создание связи между тремя узлами — пример demo3.html Описание изображения

4. Массовое создание узлов

Существует два способа массового создания узлов. Первый способ заключается в использовании списка для создания и указании атрибута from для каждого узла данных.


            let metricFlow = MetricFlow("graph")

            /*Определение данных узлов*/
               let node1Data= {
                "x":20,
                "y":200,
                "id":"node1",
                "title":{'name':"Узел 1"}
            };

            let node2Data= {
                "x":300,
                "y":50,
                "id":"node2",
                "from":"node1",
                "title":{'name':"Узел 2"}
            };
            let node3Data= {
                "x":300,
                "y":300,
                "id":"node3",
                "from":"node1",
                "title":{'name':"Узел 3"}
            };
            let node4Data= {
                "x":500,
                "y":200,
                "id":"node4",
                "from":['node2','node3'],
                "title":{'name':"Узел 4"},
                "data":[
                    {'name':"1.xxxx"},
                    {'name':"2.xxxx"},
                ]
            };
            let nodes = [node1Data,node2Data,node3Data,node4Data];
            metricFlow.createNodes(nodes);
``` **Создание узлов:**

* demo7.html:
    * ```javascript
let nodes= {
            "x":20,
            "y":200,
             ...
            "children":[
                {
                    "id":"node3",
                     ...
                    "children":[
                        {...}
                    ]
                },
            ]
        };

metricFlow.createNodes(nodes);```

**Стилизация узлов:**

* demo8.html: 
    * Второй способ создания с использованием свойства children. Корневой узел требует указания координат x и y, остальные дочерние узлы будут автоматически выравниваться по правому краю.

* demo9.html:
    * Если при автоматическом создании расстояние между узлами не подходит, его можно настроить.
    * ```javascript
let options = {
                'node-distance-offsetx':5,//левое и правое расстояния +5
                'node-distance-offsety':-5//верхнее и нижнее расстояния -5
            };
let metricFlow = MetricFlow("graph",options)```

* demo12.html:
    * При автоматическом создании, если формат данных не соответствует, и вы не хотите обрабатывать данные вручную, можно передать функцию для настройки.
    * ```javascript
function format(data){
    data['title'] = {'name':"更改title的名字"};
    return data;
}
metricFlow.createNodes(nodes,format);```

**Определение стилей:**

* demo8.html:
    * Для изменения стиля узла можно добавить свойство style.
    * ```javascript
let node2Data= {
    "id":"node2",
    "style":{
                    "node-type": "circle",//тип узла {metric,circle,rectangle} по умолчанию metric v1.1.4 новый
                    'node-width':'3px',//ширина узла по умолчанию адаптивная, после указания фиксированная v1.1.3 новая
                    'node-height':'3px',//высота узла по умолчанию адаптивная, после указания фиксированная v1.1.3 новая
                    'border-width':'3px',//толщина границы v1.1.3 новая
                    'border-color':'black',//цвет границы
                    'title-color':'black',//фон заголовка
                    'title-font-color':'white',//шрифт заголовка
                    'title-font-size':'13px',//размер шрифта заголовка
                    'data-color':'white',//фон данных
                    'data-font-size':'13px',//размер шрифта данных
                    'data-font-color':'red',//цвет шрифта данных
                },
    "title":{'name':"запуск времени статистики"},
    "data":[
       {'name':'метод:IndexController#method1'},
       {'name':'среднее время:0.333ms'},
     ]
};```

* demo7.html:
    * Добавление стилей для отдельных узлов может быть неудобным, поэтому можно использовать пакетное добавление.
    * ```javascript
metricFlow.createNodes(nodeList,addColors);
 function addColors(data) {
        data['style'] = {
            'border-color':'black',//граница
            'title-color':'black',//заголовок
            'title-font-color':'white',//шрифт заголовка
            'title-font-size':'13px',//размер шрифта заголовка
            'data-color':'white',//данные
            'data-font-size':'13px',//размер шрифта данных
            'data-font-color':'red',//цвет шрифта данных
        }
        return data
    }```

**Конфигурация соединений:**

* demo5.html:
    * Позиция соединения в настоящее время поддерживает только определение смещения. Можно определить при создании MetricFlow.
    * Соединение разделено на начальную и конечную точки, можно установить глобальное смещение начальной точки, в основном для рассмотрения случая, когда передний конец использует сложную структуру CSS, что приводит к смещению позиции из-за конфликта CSS.
    * ```javascript
let options = {
                'link-start-offsetx':1,//смещение начальной точки вправо на одну единицу
                'link-start-offsety':-1,//смещение начальной точки вверх на одну единицу
                'link-end-offsetx':-1,
                'link-end-offsety':-1,
                'link-width-offset':-1,//уменьшение толщины сегмента линии на одну единицу
                'link-color':"blue", //изменение цвета линии
                'node-distance-offsetx': -55,//автоматическое выравнивание вправо при двух узлах расстояние -55
                'node-distance-offsety': -55,//автоматическое вертикальное выравнивание при двух узлах расстояние -55
            };
let metricFlow = MetricFlow("graph",options)```

**Запрет перетаскивания:**

* ```javascript
let options = {
                'drag':false
            };
let metricFlow = MetricFlow("graph",options)```

**События узлов:**

* Поддерживаются основные события мыши, такие как click, dblclick, mousedown и mouseup, которые согласуются с исходным JavaScript, и события могут быть настроены на соответствующем узле.
* ```javascript
let node1Data= {
            "id":"primaryKey",
            "title":{'name':"двойной щелчок"},
            'click':"sinclick", //одиночный щелчок sinclick - это имя функции
            'dblclick':"doubleClick",//двойной щелчок
            "data":[
               {'name':'метод:IndexController#method1'},
               {'name':'среднее время:0.333ms'},
             ]
        };```

* demo11.html и demo14.html: примеры использования событий узлов.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
LGPL-2.1
Отмена

Обновления (12)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/huoyo-metricflow.git
git@api.gitlife.ru:oschina-mirror/huoyo-metricflow.git
oschina-mirror
huoyo-metricflow
huoyo-metricflow
master