vue dagre-d3 基于d3.js v3版本以上

20 篇文章 1 订阅

npm i d3@3.x

npm i dagre-d3@0.3.0

 

弹窗用的不是tispy 自己写的。

不支持拖拽 没有写。

 

<template>
  <div class="Newdagre">
    <svg width="960" height="1000"/>

    <div class="chartTooltip">
      <p id="chartTooltipText">
        <span class="chartTooltip-textMoney"/>
      </p>
    </div>
  </div>
</template>

<script>
import * as d3 from 'd3'
import dagreD3 from 'dagre-d3'
export default {
  name: 'Newdagre',
  mounted() {
    this.typeNode()
  },
  methods: {
    typeNode() {
      const g = new dagreD3.graphlib.Graph().setGraph({ rankdir: 'BT' })
      const states = {
        'circle': { shape: 'circle' },
        Start: { shape: 'circle', style: 'fill: #f77' },
        'JW002': { shape: 'circle' },
        'JW003': { shape: 'circle' },
        'JW004': { shape: 'circle' },
        'JW005': { shape: 'circle' },
        'JW006': { shape: 'circle' },
        'JW007': { shape: 'circle' },
        'JW008': { shape: 'circle' },
        'JW009': { shape: 'circle' },
        'JW010': { shape: 'circle' },
        'JW011': { shape: 'circle' },
        'JW012': { shape: 'circle' },
        'JW013': { shape: 'circle' },
        'JW014': { shape: 'circle' },
        'JW015': { shape: 'circle' },
        'JW016': { shape: 'circle' },
        'End': { shape: 'circle' }
      }

      Object.keys(states).forEach(function(state) {
        const value = states[state]
        value.label = state
        value.padding = 0
        value.height = 30
        value.width = 30
        value.r = 15
        value.rx = value.ry = 5
        g.setNode(state, value)
      })
      g.setEdge('circle', 'JW002', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('Start', 'JW003', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('Start', 'JW004', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW002', 'JW005', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW002', 'JW006', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW003', 'JW006', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW003', 'JW007', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW004', 'JW008', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW004', 'JW009', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW005', 'JW010', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW005', 'JW011', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW005', 'JW012', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW006', 'JW013', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW007', 'JW014', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW007', 'JW015', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW008', 'JW016', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW009', 'JW015', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW009', 'JW016', { label: '001 ', lineInterpolate: 'basis' })

      g.setEdge('JW010', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW011', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW012', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW013', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW014', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW015', 'End', { label: '001 ', lineInterpolate: 'basis' })
      g.setEdge('JW016', 'End', { label: '001 ', lineInterpolate: 'basis' })

      const render = dagreD3.render()
      const svg = d3.select('svg')
      const inner = svg.append('g')

      // console.log(render)
      // console.log(g)
      render(inner, g)
      d3.select('svg').select('g.output').attr('width', '1000').attr('height', '1000')

      const nodeEnter = d3.select('svg').selectAll('g.node')
      nodeEnter.select('circle')
        .on('mouseover', function(d) {
          if (this.timer) clearTimeout(this.timer)
          d3.select('.chartTooltip').transition().duration(300).style('opacity', 1).style('display', 'block')
          const yPosition = d3.event.layerY + 20
          const xPosition = d3.event.layerX + 20
          const chartTooltip = d3.select('.chartTooltip')
            .style('left', xPosition + 'px')
            .style('top', yPosition + 'px')
          chartTooltip.select('.chartTooltip-textMoney').text('地址:' + d)
          d3.select('.chartTooltip').on('mouseover', () => {
            if (this.timer) clearTimeout(this.timer)
            d3.select('.chartTooltip').transition().duration(300).style('opacity', 1).style('display', 'block')
          }).on('mouseout', () => {
            this.timer = setTimeout(function() {
              d3.select('.chartTooltip').transition().duration(300).style('opacity', 0).style('display', 'none')
            }, 200)
          })
        })
        .on('mouseout', () => {
          this.timer = setTimeout(function() {
            d3.select('.chartTooltip').transition().duration(300).style('opacity', 0).style('display', 'none')
          }, 200)
        })

      nodeEnter.select('g.label')
        .attr('transform', 'translate(50, 20)')
    }
  }
}
</script>

 


.Newdagre{
  width: 100%;
  height: 100%;
  display: flex;
  position: relative;
}

.Newdagre svg{
  width: 100%;
  height: 100%;
}

.Newdagre .node rect {
  stroke: #333;
  fill: #fff;
}

.Newdagre .edgePath path {
  stroke: #333;
  fill: #333;
  stroke-width: 1.5px;
}

.Newdagre .node circle{
  fill: #333;
}


.chartTooltip {
  position: absolute;
  height: auto;
  padding: 10px;
  box-sizing: border-box;
  background-color: white;
  border-radius: 5px;
  box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4);
  opacity: 0;
}
.chartTooltip p {
  margin: 0;
  font-size: 14px;
  line-height: 20px;
  word-wrap: break-word;
}
.chartTooltip p span{
  display: flex;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue dagre-d3.js是一个用于在Vue.js框架中实现DAG(有向无环图)可视化的库。它结合了vue.js、dagre和d3.js这三个库的功能。 DAG是一种图形结构,其中节点表示任务或事件,边表示任务之间的依赖关系。DAG的可视化对于理解和分析任务之间的关系非常有帮助。 Vue dagre-d3.js库通过提供一组Vue组件,使DAG的可视化变得容易。它利用了dagre-d3d3.js库的功能来布局和渲染DAG图。 使用Vue dagre-d3.js库,我们可以将DAG图表示为一个Vue组件,该组件可以在Vue应用程序中使用。我们可以定义节点和边,并指定它们之间的关系。然后,Vue dagre-d3.js库将负责将该图形布局为可视化的DAG图。 该库提供了一些自定义选项,可以定义节点的样式,边的样式和布局选项。通过这些选项,我们可以自定义DAG图的外观和布局以满足特定需求。 总之,Vue dagre-d3.js是一个方便易用的库,可以在Vue.js应用程序中实现DAG图的可视化。它简化了创建和布局DAG图的过程,并提供了许多定制选项来满足不同需求。无论是在项目管理、工作流程分析还是其他领域,Vue dagre-d3.js都是一个有价值的工具。 ### 回答2: Vue dagre-d3.js 是一个基于 Vue.js 的库,用于在 web 页面上绘制和可视化图形。它使用dagre-d3.js 库作为底层,使得在 Vue.js 中使用 dagre-d3.js 变得更加简单。 dagre-d3.js 是一个使用 d3.js 的 JavaScript 库,用于在 web 页面上绘制有向无环图(DAG)。它提供了一套强大的布局算法,可以将节点和边按照一定的规则自动排列成一张美观的图形。 Vue dagre-d3.js 的主要功能包括创建图形,添加节点和边,设置节点和边的样式,以及支持交互操作。在 Vue.js 中使用它,我们可以通过引入组件的方式来使用它,然后在组件中通过配置选项来定义图形的结构和样式。 通过 Vue dagre-d3.js,我们可以轻松地绘制各种类型的图形,如组织结构图、流程图、依赖关系图等。它提供了丰富的配置选项,可以自定义节点和边的样式,包括颜色、大小、形状等。同时,它还支持拖拽、缩放等交互操作,使得用户可以灵活地操作图形。 总结来说,Vue dagre-d3.js 是一个方便在 Vue.js 中使用 dagre-d3.js 库的工具,它能够帮助我们快速地实现图形的创建、布局和交互。无论是需要在网页上展示图形,还是进行图形数据的可视化分析,Vue dagre-d3.js 都是一个不错的选择。 ### 回答3: Vue Dagre-d3.js是一个基于Vue框架和Dagre-d3.js库的图形可视化组件。 Dagre-d3.js是一个用于绘制有向无环图(DAG)和树的JavaScript库。它基于Dagre图布局引擎和D3.js可视化库,提供了快速、灵活和可定制的图形布局和绘制功能。 Vue Dagre-d3.js利用了Vue框架的特性和Dagre-d3.js的强大功能,提供了一种更加便捷的方式来构建和渲染图形可视化组件。 使用Vue Dagre-d3.js,我们可以轻松地在Vue项目中绘制各种类型的图形,如有向无环图(DAG)、树状图等。我们可以通过定义节点和边的数据模型,并使用Vue的数据驱动特性来动态更新图形的布局和内容。 Vue Dagre-d3.js还提供了丰富的配置选项和事件回调函数,使我们可以自定义图形的外观和交互行为。我们可以设置节点和边的样式、大小和位置,以及鼠标交互时的动画效果。 总而言之,Vue Dagre-d3.js是一个功能强大、易于使用和可定制的图形可视化组件,它结合了Vue框架和Dagre-d3.js库的优势,为我们提供了一种简单而灵活的方式来构建和展示各种图形。无论是构建管理系统、数据分析仪表盘还是可视化数据结构,Vue Dagre-d3.js都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值