g6入门

59 阅读1分钟
<template>

    <div id="mountNode"></div>
</template>

<script>
    export default {
        name:'g6'
    }
</script>
<script setup>
import G6 from '@antv/g6';
import { onMounted } from 'vue';

const data = {
  nodes: [
    { id: 'node0', size: 50,label:'榴弹' },
    { id: 'node1', size: 30,label:'榴弹1',isLeaf: true  },
    { id: 'node2', size: 30, label:'榴弹2',isLeaf: true },
    { id: 'node3', size: 30,label:'榴弹3',isLeaf: true },
    { id: 'node4', size: 30, label:'榴弹4',isLeaf: true },

  ],
  edges: [
    { source: 'node0', target: 'node1' },
    { source: 'node0', target: 'node2' },
    { source: 'node0', target: 'node3' },
    { source: 'node0', target: 'node4' },

  ],
};

let layout = {
    type: 'force',
    center: [ 200, 200 ],     // 可选,默认为图的中心
    animate:true,
    preventOverlap: true,
    linkDistance: (d) => {
      if (d.source.id === 'node0') {
        return 100;
      }
      return 30;
    },
    nodeStrength: (d) => {
      if (d.isLeaf) {
        return -50;
      }
      return -10;
    },
    edgeStrength: (d) => {
      if (d.source.id === 'node1' || d.source.id === 'node2' || d.source.id === 'node3') {
        return 0.7;
      }
      return 0.1;
    },
    
}

const  init = ()=>{
    const container = document.getElementById('mountNode');
    const width = container.scrollWidth|| 500;
    const height = container.scrollHeight || 500;
    const graph = new G6.Graph({
    container: 'mountNode', // String | HTMLElement,必须,在 Step 1 中创建的容器 id 或容器本身
    width: width, // Number,必须,图的宽度
    height: height, // Number,必须,图的高度
    layout,
    modes: {
    default: ['drag-canvas', 'zoom-canvas', 'drag-node'], // 允许拖拽画布、放缩画布、拖拽节点
  },
});
    graph.data(data); // 读取 Step 2 中的数据源到图上

    graph.render(); // 渲染图
    hidden(graph)
    let flag = true
    // 鼠标点击节点,隐藏该节点
    graph.on('node:click', (ev) => {
    const node = ev.item;
    if(flag){
        show(graph)
       
    }else{
        hidden(graph)
    }
    flag = !flag
    graph.paint();
    console.log('after hide(), the node visible = ', node.get('visible'));
    });
}

onMounted(()=>{
    init()
})

const hidden = (graph)=>{
    const nodes = graph.getNodes();
    nodes.forEach((node) => {
        if(node._cfg.id!=='node0'){
            node.hide();
        }
    });
    const edges = graph.getEdges();
    edges.forEach((edge) => {
    edge.hide();
    });
}

const show = (graph)=>{
    const nodes = graph.getNodes();
    const edges = graph.getEdges();
    nodes.forEach((node) => {
        node.show();
    });
    edges.forEach((edge) => {
    edge.show();
  });
}

</script>

<style lang="less" scoped>

</style>

注意点

  • vue中需要在生命周期函数中初始化
  • const nodes = graph.getNodes(); 获取所有node
  • const edges = graph.getEdges(); 获取边
  • hide 和 show 显示隐藏
  • type: 'force', 力图