antvis/G2

绘图属性描边颜色设置成透明时,会直接失去描边 #5423

MilesLeeeeee posted onGitHub

<!-- Thank you for reporting an issue. 1. It's RECOMMENDED to submit PR for typo or tiny bug fix. 2. If this's a FEATURE request, please provide: details, pseudo codes if necessary. 3. If this's a BUG, please provide: course repetition, error log and configuration. Fill in as much of the template below as you're able. 4. It will be nice to use to provide a CodePen Link which can reproduce the issue, we provide a CodePen template g2-github-issue. 感谢您向我们反馈问题。 1. 提交问题前,请先阅读 README 中的贡献帮助文档。 2. 我们推荐如果是小问题(错别字修改,小的 bug fix)直接提交 PR。 3. 如果是一个新需求,请提供:详细需求描述,最好是有伪代码实现。 4. 如果是一个 BUG,请提供:复现步骤,错误日志以及相关配置,并尽量填写下面的模板中的条目。 5. 如果可以,请提供尽可能精简的 CodePen 链接,可使用 CodePen 模板 https://codepen.io/leungwensen/pen/WXJgox,方便我们排查问题。 6. 扩展阅读:如何向开源项目提交无法解答的问题 -->

  • G2 Version:4.2.8

  • Platform:chrome 105

  • Mini Showcase(like screenshots): image

  • CodePen Link:

    chart.interval().position('year*sales').style('sales', (aVal) => {
    // return { stroke:'#899', lineWidth:55,strokeOpacity:aVal==38?1:0 };
    return { stroke:aVal==38?'#899':'rgba(136, 153, 153,0)', lineWidth:55 };
    });

<!-- Enter your issue details below this comment. -->

使用.style设置图形描边时,无论是将stroke设置透明度为0的rgba,还是使用strokeOpacity控制透明,都会使图形的描边丢失

或者说还有没有别的办法能设置图形的边框


看源码发现其实是盖了层图形当做边框,所以如果要在不修改源码的情况下实现效果,则需要用registerShape来实现了

  registerShape('interval', 'planTime', {
    draw(cfg, group) {
      const points = this.parsePoints(cfg.points); // 将0-1空间的坐标转换为画布坐标
      let path = [
        [
          "M",
          points[0].x,
          points[0].y
        ],
        [
          "L",
          points[1].x,
          points[1].y
        ],
        [
          "L",
          points[2].x,
          points[2].y
        ],
        [
          "L",
          points[3].x,
          points[3].y
        ],
        [
          "L",
          points[0].x,
          points[0].y
        ],
        [
          "Z"
        ]
      ]

      const lineWidth = 4 // * 边框大小
      if(true){ // * 根据特定条件做特殊处理
        path = [
          [
            "M",
            points[0].x+lineWidth/2,
            points[0].y+lineWidth/2
          ],
          [
            "L",
            points[1].x,
            points[1].y+lineWidth/2
          ],
          [
            "L",
            points[2].x,
            points[2].y-lineWidth/2
          ],
          [
            "L",
            points[3].x+lineWidth/2,
            points[3].y-lineWidth/2
          ],
          [
            "L",
            points[0].x+lineWidth/2,
            points[0].y+lineWidth/2
          ],
          [
            "Z"
          ]
        ]
      }
      const polygon = group.addShape('path', {
        attrs: {
          path,
          fill:cfg.style.fill,
          stroke:cfg.style.stroke,
          fillOpacity:0.95,
          lineWidth
        },
      });
      return polygon;
    },
  });

image 原理如官方文档的图所示,通过调节各个点就可以实现如下的效果 image

posted by MilesLeeeeee over 1 year ago

Fund this Issue

$0.00
Funded

Pull requests