vTable实现多维表格

介绍

vTable是字节开发的一款能用来渲染表格的库,是用canvas渲染,避免了传统用dom组件表格的一些问题,能很快的渲染出上万格子的表格。

接下来我将使用vTable构建类似下面的多维表格,其中quantity、sales等是指标。

使用

官网地址:Getting_Started------VisActor/VTable tutorial documents

1、首先下载npm,或者cdn引入vtable,并且准备一个div作为容器。vTable有ListTable(普通表格)和PivotTable(透视表)的区别,我们现在用PivotTable来构建表格。

html 复制代码
<script src="https://unpkg.com/@visactor/vtable/dist/vtable.min.js"></script>

<div id="tableContainer" style="width: 100vw;height:100vh;"></div>

<script>
 // 创建 VTable 实例
      const tableInstance = new VTable.PivotTable(document.getElementById('tableContainer'), option);
</script>

2、准备表格数据

html 复制代码
[
  {
    "city": "重庆",
    "exist": 1,
    "sold": 2,
    "column1": "家具"
  },
  {
    "city": "武汉",
    "column1": "家具",
    "exist": 7,
    "sold": 8
  },
  {
    "city": "重庆",
    "column1": "家具",
    "exist": 2,
    "sold": 3
  },
  {
    "city": "武汉",
    "column1": "家具",
    "exist": 8,
    "sold": 9
  },
  {
    "city": "重庆",
    "column1": "体育器材",
    "exist": 4,
    "sold": 5
  },
  {
    "city": "武汉",
    "column1": "体育器材",
    "exist": 10,
    "sold": 11
  },
  {
    "city": "重庆",
    "column1": "体育器材",
    "exist": 6,
    "sold": 7
  },

  {
    "city": "武汉",
    "column1": "体育器材",
    "exist": 11,
    "sold": 12
  }
]

3、构建option。

row和column用来指定行和列,

indicators用来指定指标,

dataConfig用来设置合计、平均值等一些计算,

hideIndicatorName用来设置是否隐藏指标

更多配置请看官网

javascript 复制代码
      const records = content
      const option = {
        records,
        rows: [
          {
            dimensionKey: 'city',
            title: '城市',
          }
        ],
        columns: [{
          dimensionKey: 'column1',
          title: '类别',
        }
        ],
        indicators: [{
          indicatorKey: 'exist',
          title: '现存'
        },
        {
          indicatorKey: 'sold',
          title: '已售',
        }
        ],
        // 设置左上角
        corner: {
          titleOnDimension: 'all',//row   column  all
        },
        // hideIndicatorName: true,//隐藏指标名
        // 设置合计
        dataConfig: {
          totals: {
            row: {
              showGrandTotals: true,
              subTotalsDimensions: ['exist'],
              grandTotalLabel: '合计',
            },
          }
        },
        widthMode: 'standard'
      };

完整代码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- <script src="https://unpkg.com/@visactor/vtable/dist/vtable.min.js"></script> -->
  <script src="./vtable.min.js"></script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

  </style>
</head>

<body>
  <div id="tableContainer" style="width: 99vw;height:99vh;"></div>
  <script>
    fetch('./data4.txt').then(res => res.json()).then(res => {

      console.log(res);
      let content = res
      const records = content
      const option = {
        records,
        rows: [
          {
            dimensionKey: 'city',
            title: '城市',
          }
        ],
        columns: [{
          dimensionKey: 'column1',
          title: '类别',
        }
        ],
        indicators: [{
          indicatorKey: 'exist',
          title: '现存'
        },
        {
          indicatorKey: 'sold',
          title: '已售',
        }
        ],
        // 设置左上角
        corner: {
          titleOnDimension: 'all',//row   column  all
        },
        // hideIndicatorName: true,//隐藏指标名
        // 设置合计
        dataConfig: {
          totals: {
            row: {
              showGrandTotals: true,
              subTotalsDimensions: ['exist'],
              grandTotalLabel: '合计',
            },
          }
        },
        widthMode: 'standard'
      };
      // 创建 VTable 实例
      const tableInstance = new VTable.PivotTable(document.getElementById('tableContainer'), option);

    })

  </script>
</body>

</html>

效果

现存和已售是指标。

最后附上效果:

END

相关推荐
CharlesYu015 小时前
前端性能优化的第一性原理,是不断缩短“用户发起意图 → 获得可用结果”之间的时间
前端
平头哥技术团队6 小时前
Day 21 _ 页内锚点_给每段起个 id,目录写 href=_#id_,点一下页面就滚到那一段
前端·html·html5
子兮曰7 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面7 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方8 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结8 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言8 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒9 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机9 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
泯泷10 小时前
手搓JSVM第 12 篇:完整最小 JSVM 实现与源码设计复盘
前端·javascript·前端框架