vis设置某一个节点icon不一样(img、样式同理)

7 篇文章 0 订阅

效果:

 


代码:

<template>
  <div>
    <i class="fa fa-building-o" style="visibility:hidden;"></i>
    <div class="visBox">
      <div id="mynetwork"></div>
      <div v-if="this.isTitle" class="visTitle">{{this.title}}</div>
    </div>
  </div>
</template>
<script>
const vis = require('vis-network/dist/vis-network.min.js')
require('vis-network/dist/dist/vis-network.min.css')
import 'font-awesome/css/font-awesome.min.css'
export default {
  data() {
    return {
      title: '',
      isTitle: false,
      list: [
        { id: 1, label: '华为投资控股有限公司' },
        { id: 2, label: '杭州华为企业通信技术有限公司' },
        { id: 3, label: '上海海思技术有限公司',icon: { face: 'FontAwesome', code: '\uf2bc', weight: 5, size: 40, color:'#2B7CE9' }}, // 重点,会覆盖全局定义的
        { id: 4, label: '华为软件技术有限公司' },
        { id: 5, label: '深圳市海思半导体有限公司' }
      ],
      nodes: null,
      edges: new vis.DataSet([
        { from: 1, to: 2 },
        { from: 1, to: 3 },
        { from: 1, to: 4 },
        { from: 1, to: 5 }
      ]),
      color: ['#ef9a9a','#f8bbd0','#ce93d8','#b39ddb','#7986cb','#90caf9','#81d4fa']
    }
  },
  mounted() {
    var _this = this
    _this.nodes = new vis.DataSet(_this.list)
    var container = document.getElementById('mynetwork');
    var data = {
      nodes: this.nodes,
      edges: this.edges
    };
    var options = {
      autoResize: false, // 自动调整容器大小(无css下起作用)
      nodes: { // 节点
        borderWidth: 1, // 节点边框的宽度
        borderWidthSelected: 3, // 选中节点的边框宽度,未定义时为borderwidth*2
        chosen: { // 对选择及悬停做出反应
          node: function(values, id, selected, hovering) {
            values.color = 'red'
          },
        },
        color: {
          background: '#ef9a9a'
        },
        fixed: false, //节点不可以移动
        font: {
          color: '#333',
          size: 12,
          background: 'rgba(255,255,255,0.5)',
          align: 'left',
          // vadjust: 20, // 文字的垂直位置
        },
        // group: { //节点的归属组
        //   heightConstraint: 10, // 最小高度
        // },
        margin: 20,
        mass: 2, // 节点之间的排斥力
        shadow: {
          enabled: true, // 阴影
        },
        shape: 'icon', // 节点的外观
        size: 20,
        icon: {
          face: 'FontAwesome',
          code: '\uf1ad',
          weight: 5,
          size: 40,
          color:'#2B7CE9'
        },
      },
      edges: { // 边的配置项必须包含在名为“edges”的对象中
        arrows: { // 线条
          to: {
            enabled: true, // 打开或关闭箭头
            type: 'triangle', //箭头类型
          }
        },
        chosen: { // 对选择及悬停做出反应
          edge: function(values, id, selected, hovering) { // 线的变化
            values.color = 'red';
            values.width = 3
          },
          label: function(values, id, selected, hovering) { // 线上标签的变化
            values.color = 'red'
          },
        },
      },
      interaction: { // 交互
        hover: true,// 当鼠标移到节点上时,节点使用其悬停颜色
        hoverConnectedEdges: true,// 当鼠标悬停在节点上时,与其连接的边将以高亮(高亮色)显示
        zoomView: true // 允许用户缩放视图
      },
      // 布局
      layout: {
        randomSeed: 1, //配置每次生成的节点位置都一样
      },
      //物理引擎-计算节点之前斥力,进行自动排列的属性
      physics: {
        enabled: false, //默认是true,设置为false后,节点将不会自动改变,拖动谁谁动。不影响其他的节点
      },
      // manipulation: { // 可视化操作
      //   enabled:true
      // }
    };
    var network = new vis.Network(container, data, options);
    network.moveTo({
      scale: 0.8,
      position: {
        x:0,y:0
      },
      animation: true,
      // 动画持续时间
      // duration: 10000,
      // 动画类型
      easingFunction: 'easeeinoutquint'
    })
    network.on('click',function(properties){
      _this.isTitle = true
      _this.list.forEach(item => {
        if (item.id == properties.nodes[0]) {
          _this.title = item.label
        }
      })
    })
  }
}
</script>
<style scoped>
#mynetwork {
  width: 500px;
  height: 500px;
  border: 1px solid lightgray;
}
.visBox{
  width: 500px;
  height: 500px;
  position: relative;
}
.visTitle{
  position: absolute;
  top: 0;
  left: 0;
  background-color: antiquewhite;
  width: 230px;
  height: 50px;
  line-height: 50px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值