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

相关推荐
To_OC6 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel8 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_10 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx10 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师10 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow11 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路11 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他11 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou13211 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙11 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript