antv/f2 移动端踩坑📝

7,827 阅读2分钟

一、antv/f2

antv/f2是一个开箱即用的移动端可视化插件,支付宝的柱状图、饼状图和线性图部分用它来实现 antv/f2的文档

二、一些烦人的东西

1. 关于柱状图可以左右滑动问题

  • 首先,文档的那个例子只能显示第一批次的数据,左右滑动会造成数据的缺失,目前我也不知道原因,知道的可以告知一下,例子可以看官方的codesandbox(如果数据错误,换一下数据请求的地址,或者自己定义一个data试一下)
  • github上我看到有人提了相关的issue,文章发布时应该还未解决

第一种解决方法:

使用隐藏滑动的方式,把全部数据正常渲染出来,通过外层元素设置overflow属性去滚动显示

优点:很明显的,滑动效果很顺滑

缺点:需要渲染的时候计算canvas的总宽度

<div class="outer">
  <div class="inner">
    <canvas id="chart"></canvas>
  </div>
</div>

第二种解决方法:

官方的柱形图左右滑动有问题,但是折线图没有问题,具体看这 折线图例子,所以我们可以使用折线图的渲染,然后再渲染一遍柱形图的,虽然听来这个做法很有问题,下面给出主要的设置

优点:终于有了文档那样的效果

缺点:因为是折线图变形而来的,第一个和最后一个数据没法显示完全,滑动不流畅

  this.chart.source(this.data, {
    release: {
      min: 2010,
      max: 2015
    }
  });
  this.chart
    .line()
    .position('release*count')
    .style({
      lineWidth: 0   //设置折线的粗细为0
    })
  // 再渲染一次折线图后再渲染一次柱状图
  this.chart
    .interval()
    .position('release*count')
  this.chart.interaction('pan');
  this.chart.render();

2. 关于饼状图的label

饼状图可以用PieLabel去绘制饼状图的线条文本,但是如果数据太多的话就会出现一个很严重的渲染问题,那就是由于label太多导致渲染的图直接崩了,虽然PieLabel可以使用skipOverlapLabels属性不显示重叠的label,但是实际情况是,依然会有很多label渲染出问题。下图的顶部skipOverlapLabels生效了,左边崩了。

如果能设置线条的样式这个问题就可以解决,但是文档中,对线条的设置只接受对象类型的配置

lineStyle: { Object }, // 连接线的样式

所以这一点我也不知道怎么去解决,如果知道的麻烦告知一下,我看到支付宝确实可以部分绘制的。

那我只能拿刀去和产品商量一下,最终,渲染前n位数据,后面的数据有 ‘其他’ 来代替