logo

S2

  • 使用文档
  • API 文档
  • 图表示例
  • 在线体验
  • 更新日志
  • 所有产品antv logo arrow
  • 2.x
  • 简介
  • 快速上手
  • 基础教程
    • 基本概念
      Updated
    • 表形态
      • 透视表
        Updated
      • 明细表
        Updated
    • 字段标记
      Updated
    • 小计总计
    • 排序
      • 基础排序
        Updated
      • 组内排序
        Updated
    • 主题配置
      Updated
    • Tooltip
      Updated
    • 数据格式化
      New
    • 多行文本
      New
    • 国际化
    • 分页
      New
  • 进阶教程
    • 单元格渲染类型
      • 链接
      • 图片
        New
      • 视频
        New
      • 迷你图表
      • 结合@antv/g2
      • 自定义渲染
    • 自定义
      • 自定义 Hook
        Updated
      • 自定义行列头分组
        New
      • 自定义 Icon
        Updated
      • 自定义单元格对齐方式
        Updated
      • 自定义单元格宽高
        Updated
      • 自定义排序操作
        Updated
      • 自定义折叠/展开节点
        New
    • 交互
      • 基础交互
        Updated
      • 自定义交互
      • 隐藏列头
        Updated
      • 行列宽高调整
        Updated
      • 合并单元格
      • 滚动
        Updated
      • 复制与导出
        New
      • 高亮/选中单元格
        New
    • 分析组件
      • 简介
        New
      • 高级排序
        Updated
      • 维度切换
        Updated
      • 导出
        Updated
      • 分页
        Updated
      • 维度下钻
        Updated
    • 表格组件
      • 编辑表
      • 趋势分析表
        Updated
    • 高清适配
      Updated
    • 获取表格实例
    • 表格自适应
    • 获取单元格数据
      Updated
    • 注册 AntV/G 插件
      New
    • 透视组合图
      Experimental
    • Vue 3.0 组件 (停止维护)
  • 扩展阅读
    • 数据流处理
      • 透视表
      • 明细表
    • 布局流程
      • 透视表
      • 明细表
    • 性能介绍
      Updated
  • 贡献指南
  • 常见问题
  • S2 2.0 升级指南

高清适配

上一篇
趋势分析表
下一篇
获取表格实例

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

S2 基于 Canvas 渲染,在实际的业务场景开发中,我们发现有以下使用场景会导致 表格渲染模糊

  1. 不同 DPR 的设备之间来回切换:比如一台 MacBook(视网膜屏), 外接一台显示器 (普通 2k 屏), 将浏览器移到外接设备查看。
  2. 使用 笔记本触控板 对页面进行双指捏合缩放:使用双指缩放,来放大显示,而不是传统的 cmd + +, cmd + - 缩放浏览器窗口大小。

高清适配默认开启,可以手动关闭

const s2Options = {
hd: false
}

效果对比

关闭高清适配

disable

开启高清适配

enable

不同 DPR 设备间切换

对于这种场景,我们使用 matchMedia 来监听 DPR 的变化,更新 canvas 的尺寸,从而达到高清的效果

const { width, height } = s2Options
const devicePixelRatioMedia = window.matchMedia(
`(resolution: ${window.devicePixelRatio}dppx)`,
);
devicePixelRatioMedia.addEventListener('change', renderByDevicePixelRatio)
const renderByDevicePixelRatio = (ratio = window.devicePixelRatio) => {
const newWidth = Math.floor(width * ratio);
const newHeight = Math.floor(height * ratio);
// 内部的更新容器大小方法
changeSheetSize(newWidth, newHeight);
};

笔记本触控板双指缩放

preview

区别于浏览器的放大缩小,普通的 resize 事件是无法触发的

preview

// 触控板双指缩放 无法触发
window.addEventListener('resize', ...)

普通浏览器窗口放大缩小

preview

触控板双指缩放

preview

那么如果解决呢?答案就是 使用 VisualViewport API, VisualViewport 可以被用做移动端的双指缩放监听,同样适用于 mac 触控板

window.viewport?.visualViewport?.addEventListener(
'resize',
this.renderByZoomScale,
);
const renderByZoomScale = debounce((e) => {
// 拿到缩放比 更新容器大小
const ratio = Math.max(e.target.scale, window.devicePixelRatio);
if (ratio > 1) {
const { width, height } = s2Options
const newWidth = Math.floor(width * ratio);
const newHeight = Math.floor(height * ratio);
// 内部的更新容器大小方法
changeSheetSize(newWidth, newHeight);
}
}, 350);

关闭高清适配

preview

开启高清适配

preview

完整代码

自定义设备像素比

表格默认使用设备当前像素比渲染,也就是 window.devicePixelRatio, 如果你觉得初始渲染就很模糊,可以手动指定表格按照 2 倍设备像素比来渲染,通过 transformCanvasConfig 透传给底层的 G 绘制引擎

const s2Options = {
transformCanvasConfig() {
return {
devicePixelRatio: 2
}
}
}