antv G6 实践踩坑,插件,时间轴,撤销回退,修改样式

总结: 多看案例,遇到图渲染不出来的,检查语法错误,控制台不一定会报错,找不出的话就回退代码,一次不要写太多的代码才看效果。历经一个多月的奋斗,修修改改,G6的大部分功能都有实践到,如果还有没有写到的,欢迎评论区留言交流或者私信我。语法用的是vue2+antv

  1. 当使用了G6.Util.processParallelEdges 时是否无法使用‘边自定义’功能了:原因是边类型冲突了,需要将边类型改为边自定义类型。G6
const offsetDiff = 40;   // 节点间多条线间距
const multiEdgeType = 'circle-running1';
const singleEdgeType = 'circle-running'    //circle-running 自定义边动画 
G6.Util.processParallelEdges(edges,offsetDiff,multiEdgeType,singleEdgeType)

    2. 撤销回退功能:只能使用官方提供的 new G6.ToolBar来编写撤销回退功能,自己写的话很麻烦,需要监听各类事件,如果需要自定义工具栏,可以将工具栏覆盖在自定义的工具栏上。G6

这里提一个小坑,用官方自定义的工具栏需要严格按照他的格式使用ul-li,否则没有效果。

<div id="toolbar" >
    <ul v-if="isShowToolbar">
      <li code='undo'>
        <span role="img" class="anticon"
          ><svg width="2.2em" height="2.2em" fill="currentColor" aria-hidden="true" focusable="false" class="">
            <use xlink:href="#icon-undo">use>svg>span
        >
        <span class="tool_text">Undospan> li> <li code='redo'> <span role="img" class="anticon" ><svg width="2.2em" height="2.2em" fill="currentColor" aria-hidden="true" focusable="false" class=""> <use xlink:href="#icon-redo">use>svg>span > <span class="tool_text">Redospan> li> ul> div>

  3 .  new G6.Tooltip:可以设置需要提示框的类型 itemTypes: ['node', 'edge', 'combo'],e.item.getType() === 'node' 也可以根据不同类型显示不同的内容。加点击事件:

outDiv.innerHTML = `
    ${model.tooltip}
    <svg
      class="icon copy-text"
      aria-hidden="true"
    >
      <use xlink:href="#icon-fuzhi1">use>
    svg>
`;
outDiv.addEventListener('click',function(){
    _that.copy(model.tooltip)
});

 4. G6.registerCombo : 自定义的combo响应事件可以在afterUpdate 中编写,并监听点击事件。如果需要编写展开收起关闭效果,自定义关闭按钮需要动态修改其x,y位置。内置的方法更换不了图片,需要自定义,在afterUpdat 中编写更换图片

afterUpdate: function afterUpdate(cfg, combo) {
          const group = combo.get('group');
          const rightCircle = group.find((ele) => ele.get('name') === 'right-circle');
          const rightText = group.find((ele) => ele.get('name') === 'right-text');                
        rightText.attr('img', cfg.collapsedSubstituteIcon.img);
        rightCircle.attr('opacity',1)     
        rightCircle.attr('x',custom.cfg.attrs.x + 48)
        rightCircle.attr('y',custom.cfg.attrs.y - 8)                           
        rightText.attr('opacity',1)
},
this.graph.on('combo:click', (evt) => {
      const { item,target } = evt;
      this.comboId = item._cfg.id
      let combo = this.graph.findById(this.comboId);
      if(target.cfg.name == 'right-circle' ){
        combo.update({   //合并为图标
          fixCollapseSize:[20,30],
            collapsed: true,
            padding: [15, 20, 15, 20],
            collapsedSubstituteIcon: {
              show: true,
              img: data.icon,
              width: 40,
              height: 40
            },        
        });
        this.graph.expandCombo(this.comboId)
        this.graph.updateCombos();
      }   
    });

  5.  G6.registerNode:自定义节点的样式修改和响应事件,很多自定义的内容修改都需要在自定义方法里面进行修改,因为正常修改没有效果

G6.registerNode('custom-node', {
      draw(cfg, group) {},
      update(cfg, node) {
        // 若未指定registerNode的第三个参数并且未定义update方法时,则节点更新时会执行 draw 方法,所有图形清除重绘
        if (cfg.attrs) {
        // 获取自定义的点方式自选
          let custom = node.get('group').cfg.children  
          // 底部lable
          if(cfg.attrs.textColor){
            custom[2].attr('fill', cfg.attrs.textColor);
         }
     },
     // 设置响应
     setState(name, value, item) {
        const circle = item.get('group').find((element) => element.get('name') === 'circle');
        if (name === 'selected') {
          if (value) {
            circle.attr('lineWidth',5)
          } else {
            circle.attr('lineWidth',1)
          }
        }
     },
}),

this.graph.updateItem(node, { 
    style: { fontSize } 
}, true);

   6.  时间轴:点击按钮出现时间轴可以用新增插件的方法,并且在趋势图中添加柱状图。时间轴的数据格式,节点中也需要增加date属性,并且需要和时间轴date格式相同,才能用内置的筛选功能,不同的时间轴类型需要的date格式不一样。坑点:如果时间轴出不来,仔细阅读官方文档,观察数据格式问题。时间轴数据的动态更新怎么做,官方没有提供相关的方法,我是先销毁,再创建来实现的。

if(this.timeBar) this.timeBar.destory()
this.timeBarData=[{date:'2010-10-9',value: 12}]
this.timeBar = new G6.TimeBar({
        x: 0,
        y: 0,
        width,
        height: 150,
        padding: 10,
        type: 'trend',
        trend: {
          data: this.timeBarData,
          interval: { 
            data: this.timeBarData.map(item => item.value), // 设置为你的柱状图数据
            style: {
              stroke: '#1890ff',
              fill: '#1890ff', // 设置柱状图颜色,
              barWidth: 20    // 设置柱状图宽度
            },
          }
        },
        changeData: false,
        rangeChange(graph, minValue, maxValue){
        // 自定义节点的隐藏显示
          const nodes = graph.cfg.nodes
          const min = Number(minValue.split('-').join(''))
          const max = Number(maxValue.split('-').join(''))
          nodes.forEach(node=>{
            let time = node.getModel().date
            let num = Number(time.split('-').join(''))
            if( min <= num && num <= max) {
              that.graph.showItem(node);
            }else{
              that.graph.hideItem(node);
            }
          })
        },
        
      });
      this.graph.addPlugin(this.timeBar);

   7.  实现两个节点间3条以上连线合并为一条线,3条以下分开展示: 我用的办法比较笨代码非常多,如果有更好的,欢迎交流。所以只能提供思路: 创建前预处理数据(知晓两个节点间的连线数)- 创建节点时判断当前是第几条连线,动态给弧度数 - 渲染完成之后,修改边类型,3条以上和一条连线为line,其他的为 quadratic 类型。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 G2Plot 中,可以使用 `slider` 参数来开启缩略轴。如果需要自定义缩略轴的样式,可以通过 `slider` 参数中的 `start` 和 `end` 属性来设置缩略轴的起始和结束位置,并通过 `backgroundStyle` 和 `foregroundStyle` 属性来设置缩略轴的背景和前景样式。 如果需要修改 slider 的样式,可以使用 CSS 来进行样式调整。可以通过在 HTML 页面中引入样式表或者在 JavaScript 中动态添加样式来实现。以下是一个示例代码: ```javascript import { Line } from '@antv/g2plot'; const data = [ { year: '1991', value: 3 }, { year: '1992', value: 4 }, { year: '1993', value: 3.5 }, { year: '1994', value: 5 }, { year: '1995', value: 4.9 }, { year: '1996', value: 6 }, { year: '1997', value: 7 }, { year: '1998', value: 9 }, { year: '1999', value: 13 }, ]; const linePlot = new Line('container', { data, xField: 'year', yField: 'value', slider: { start: 0.1, end: 0.4, backgroundStyle: { fill: '#f5f5f5', stroke: '#ddd', lineWidth: 1, lineDash: [3, 3], }, foregroundStyle: { fill: '#1890ff', stroke: '#ddd', lineWidth: 1, }, }, }); // 动态添加样式 const style = document.createElement('style'); style.innerHTML = ` .g2-slider { height: 50px; padding-top: 10px; } .g2-slider-horizontal .g2-slider-handle { width: 20px; height: 20px; border-radius: 10px; background-color: #1890ff; border-color: #1890ff; } .g2-slider-horizontal .g2-slider-handle:after { display: none; } `; document.head.appendChild(style); ``` 在上面的代码中,我们通过 CSS 来修改了 `.g2-slider` 和 `.g2-slider-handle` 的样式来实现了自定义缩略轴和 slider 样式的效果。具体来说: - `.g2-slider` 被设置为了高度为 50px,并且在顶部添加了 10px 的内边距。 - `.g2-slider-horizontal .g2-slider-handle` 被设置为了宽度和高度都为 20px,并且圆角为 10px,背景颜色为 `#1890ff`,边框颜色也为 `#1890ff`。 - `.g2-slider-horizontal .g2-slider-handle:after` 被设置为了 `display: none`,这样可以隐藏 slider 拖动时的箭头图标。 通过这些 CSS 样式的调整,我们可以实现更加个性化的缩略轴和 slider 样式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值