前端实现D3使用图片展示在节点上

createThreeD(list) {
        //异步渲染  一般用于在弹框渲染中  直接展现在页面也可以忽略
        setTimeout(() => {
          //获取D3     rankdir   LR控制流程图横向扩张
          var g = new dagreD3.graphlib.Graph().setGraph({rankdir: "LR"});
          // 添加节点
          list.nodeInfos.forEach((item, index) => {
            item.rx = item.ry = 5;//圆角
            // 设置背景为白色
            item.style = 'fill:white;'
            // 设置渲染元素的类型
            item.labelType = 'html'
            var img
			//判断显示图片
            if(item.noteType==="pm_equipment_pipe"){
            	//在这里插入图片描述
siding这里的是引入本地的图片
                img = this.siding
            }
            // 设置添加图片
            if(item.whetherTheWholeShow){
                item.label= `<div class="node-label-html" style="text-align:center"><span class="node-label"> <img style="width:50px;height:50px" src="${img}" alt="" /></i><br/>${item.label}<br/>前量:${item.fort}<br/>后量:${item.after}<br/>变化量:${item.change}</span></div>`
            }else{
                item.label= `<div class="node-label-html" style="text-align:center"><span class="node-label"> <img style="width:50px;height:50px" src="${img}" alt="" /></i><br/>${item.label}<br/>变化量:${item.change}</span></div>`

            }
            //添加节点
            g.setNode(item.id, item);
          });
          // 链接关系
          list.edges.forEach(item => {
            g.setEdge(item.source, item.target, {
              // 连线上的条件字
              label: item.label,
              // 连线的颜色
              style: "stroke: #0fb2cc; fill: none;",
              // 箭头颜色
              arrowheadStyle: "fill: #0fb2cc;stroke: #0fb2cc;",
              // 箭头形状(vee表示箭头是尖的,默认是平的)
              arrowhead: 'vee',
            });
          });

          //绘制图形(此处和darg中的不同)
          var svg = d3.select("#flowchart")
            .append('svg')
            .attr('width', 1050)
            .attr('height', 500)
          var inner = svg.append("g");
          //缩放
          var zoom = d3.zoom().on("zoom", function () {
            inner.attr("transform", d3.event.transform);
          });
          svg.call(zoom);
          var render = new dagreD3.render();
          render(inner, g);
          let code;
          // inner.selectAll("g.node")
          //   .on("click", e => {//点击事件
          //     code = this.list.nodeInfos.filter(item => {
          //       return item.id == e;
          //     });
          //   })
          //   .on('mouseover', e => {//鼠标经过事件
          //     let curNode = g.node(e)
          //   });
          // 初始化缩放比例
          var initialScale = 1;
          // 设置宽高
          svg.call(
            zoom.transform,
            d3.zoomIdentity
              .translate(
                (svg.attr("width") - g.graph().width * initialScale) / 2,
                20
              )
              .scale(initialScale)
          );
          svg.attr("height", g.graph().height * initialScale + 100);
        }, 0);
      },
```![实例图片](https://img-blog.csdnimg.cn/8e6760657c4145c78ea7ce3d5cdc1b21.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KeC5bGxLg==,size_20,color_FFFFFF,t_70,g_se,x_16)


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在d3中的节点标上添加文字,可以按照以下步骤实现: 1. 在Vue组件中引入d3库,并定义一个方法来生成d3表。 ```javascript import * as d3 from 'd3'; export default { data() { return { // ... }; }, methods: { generateD3Chart() { const svg = d3.select('#chart'); // ... }, }, }; ``` 2. 在generateD3Chart方法中,使用d3提供的方法创建节点,并为每个节点添加标和文字。 ```javascript generateD3Chart() { const svg = d3.select('#chart'); const nodes = [ { id: 1, name: 'Node 1', type: 'A' }, { id: 2, name: 'Node 2', type: 'B' }, { id: 3, name: 'Node 3', type: 'C' }, ]; const node = svg.selectAll('.node') .data(nodes) .enter() .append('g') .attr('class', 'node'); node.append('rect') .attr('width', 50) .attr('height', 50) .attr('fill', 'white') .attr('stroke', 'black'); node.append('text') .text(d => d.name) .attr('x', 25) .attr('y', 70) .attr('text-anchor', 'middle'); node.append('image') .attr('href', d => { if (d.type === 'A') { return '/path/to/image1.png'; } else if (d.type === 'B') { return '/path/to/image2.png'; } else { return '/path/to/image3.png'; } }) .attr('x', 5) .attr('y', 5) .attr('width', 40) .attr('height', 40); }, ``` 在上面的代码中,我们为每个节点添加了一个text元素,并将节点的name属性作为文字内容。注意,我们将text元素的y坐标设置为70,以确保文字显示在节点标下方。 3. 在Vue组件的mounted钩子函数中调用generateD3Chart方法。 ```javascript export default { // ... mounted() { this.generateD3Chart(); }, }; ``` 这样就可以在d3中的节点标上添加文字了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值